局部常量 在实现文件中使用 static const 来定义"只在编译单元内可见的常量"(translation-unit-specific constant).其命名规则为在前面加字母k // // EOCAnimatedView.h // #import <UIKit/UIKit.h> @interface EOCAnimatedView : UIView @end // // EOCAnimatedView.m // #import "EOCAnimated…
第四条:多用类型常量,少用#define预处理指令 使用#define 预处理的坏处:定义出来的常量没有类型信息,编译器只是会在编译前据此执行查找与替换操作.即使有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一致. 使用例如:static const NSTimeInterval kAnimationDuration = 0.3; 在实现文件中使用 static const 来定义“只在编译单元内可见的常量”.由于此类常量不再全局符号表中,所以无须为其名称加前缀.…
摒弃: #define ANIMATION_DURATION 0.3   #define ERROR_MESSAGE @“ErrorMessage” 1)没有常量的类型信息 2)假设此指令声明在某个头文件中,那么所有引入了这个头文件的代码,都可以访问和修改ANIMATION_DURATION.   推荐: 1.私有常量 .m文件 static const NSTimeInterval kAnimationDuration = 0.3;   static NSString *const kErro…
定义常量的几种方式: 1.#define ANIMATION_DURAION 0.3         //定义了一个动画时长的常量, 预处理过程会把碰到的所有ANIMATION_DURAION一律替换成0.3 2.static const NSTimeInterval kAnimationDuration = 0.3;  //static 意味着该变量仅在定义此变量的编译单元中可见(也是.m文件).这种常量不出现在全局符号表中. 3. extern NSString *const StringC…
来自<Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法>一书的摘要总结 一.熟悉Objective-C 了解Objective-C语言的起源 Objective-C为C语言添加了面向对象特性,是其超集.Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型.接收一条消息之后,究竟应执行何种代码,由运行环境而非编译器来决定. 理解C语言的核心概念有助于写好Objective-C程序.尤其要掌握内存模型与指针. 在类的头文件…
阅读此书的笔记点: 此书目录即是对知识点最好的总结 第1章 熟悉Objective-C ---------------------------------------------- 第1条:了解Objective-C语言的起源 第2条:在类的头文件中尽量少引入其他头文件 第3条:多用字面量语法,少用与之等价的方法 第4条:多用类型常量,少用#define预处理指令 第5条:用枚举表示状态.选项.状态码 第2章 对象.消息.运行期 ---------------------------------…
第一章 熟悉Objective -C   编写高质量iOS与OS  X代码的52 个有效方法   第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行的代码由运行环境来决定.而使用函数调用的语言,则由编译器决定.如果范例代码中调用的函数是多态的,那么在运行时就要按照虚方法表 virtual table 来查出到底应该执行那个函数实现.而采用消息结构的语言,不论是否多态,总是在运行时才会去查找所要执行的方法. 实际上,编译器甚至不关心接受消息的对象…
一.熟悉Objective-C 1.了解Objective-C语言的起源 2.在类的头文件中尽量少引入其他头文件 3.多用字面量语法,少用与之等价的方法 4.多用类型常量,少用#define预处理指令 5.用枚举值表示状态.选项.状态码 二.对象.消息.运行期 6.理解“属性”这一概念 7.在对象内部尽量直接访问实例变量 8.理解“对象等同性”这一概念 9.以“类族模式”隐藏实现细节 10.在既有类中使用关联对象存放自定义数据 11.理解objc_msgSend的作用 12.理解消息转发机制 1…
第一章重点: 第一条:OC的起源 OC由smalltalk语言演化而来的语言为消息结构(messaging structure)语言,其运行时所因执行的的代码由运行环境来决定:函数调用(function calling)语言(Java,C++)则由编译器决定. 分配在堆中的内存必须直接管理,而分配在栈中的内存用于保存变量的内存则会在其栈帧中弹出时自动清理掉. OC将堆内存管理抽象出来.不需要malloc和free来分配或释放对象所占的内存,这一套抽象管理框架叫:引用计数. 与预创建结构体相比,创…
1.Objective-C 起源: 在 C 语言基础上添加了面向对象特性,是 C 语言的超集.Objective-C 由 SmallTalk 语言演变过来,使用消息结构,运行环境由运行环境决定. OC 对象所占内存总是分配在堆空间,绝不会在栈空间分配内存.不含 * 的变量,保存的不是OC对象,可能使用栈空间. 2.在类的头文件中,应尽量少引用其他头文件: 在编译一个使用其他类的头文件(.h文件)时,如果不需要知道那个类的实现细节,可以使用 @class ***; 即可.在实现文件中(.m),需要…