第1条:了解 Objective-C 语言的起源
-
使用消息结构的语言,其运行时所执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。 如果调用的函数是多态的,那么在运行时就要按照“虚方法表”来查出到底应该执行哪个函数。而采用消息结构的语言,不论是否多态,总是在运行时才会去查找所要执行的方法。
-
指针是分配在 stack 上的,对象是分配在 heap 中。指针指向堆中的数据。
-
如果只需要保存“非对象类型”,那么通常使用结构体就可以了。 与创建结构体相比,创建对象还需要额外开销,例如分配及释放堆内存等。
第2条:在类的头文件中尽量少引入其他头文件
- @class:类的向前声明
- 更加合理:不需要再头文件中知道其他类的全部细节,在 .m 文件中再将其引入即可。
- 避免循环链入头文件。
- 减少编译时间。
- 尽量降低类之间的耦合。
- 必须引入头文件的情况:继承、协议
第3条:多用字面量语法,少用与之等价的方法
-
字面量语法更加安全:有 nil 就 crash,普通语法是有 nil 就停止,所以会碰到少添加元素的情况。
这种情况是在用字面量语法创建字典的过程中插入了空值,导致了 crash。如果使用一般的构造方法,碰到空值会认为是结束符,而停止录入之后的元素,这样就会存在少添加元素的状况。 -
语法糖:也成“语法糖衣”,是指计算机语言中与另外一套语法等效但是开发者用起来却更加方便的语法。
-
局限性:字面量语法有个小小的限制,就是除了字符串以外,所创建出来的对象必须属于 Foundation 框架才行。如果自定义了这些类的子类,则无法用字面量语法创建其对象。要想创建自定义子类的实例,必须采用“非字面量语法”。
第4条:多用类型常量,少用#define预处理指令
-
使用 #define 定义出来的常量没有类型的信息。使用 static const 来定义常量包含类型信息,其好处是清楚的描述了常量的含义。
-
常用的命名法:若常量局限于某“编译单元(也就是实现文件 .m 内)”,则在前面加字母 k,若常量在类之外可见,则通常以类名作为前缀。
-
通知格式
.h: extern NSNotificationName const XXXXX;
.m: NSNotificationName const XXXXX = @“XXXXX";
- #define 的优点(视情况而定)
- 方便修改,可以使用预编译指令进行修改。
- 如果开关是由多个元素控制,用 static const 无法单独控制,而用#define 可以定义含参指令。
第5条:用枚举表示状态、选项、状态码
- 选项用按位或 “|” 可以选择多项。用按位与 “&” 可以进行判断是否开启该选项。
- 枚举 NSENUM、选项 NSOptions。
- Swithc中,若用枚举来定义状态机,最好不要加入 default 语句,如果稍后又加了一个状态,那么编译就会发出警告信息,提示新加入的状态并未在 switch 分支中处理。