第一条
OC语言由Smalltalk演化而来,Smalltalk语言是消息型鼻祖,消息结构和函数调用的区别如下:
//message structure
Object *obj = [Object new];
[obj preformWith:paramter1 and:paramter2];
//function calling
Object *obj = new Object;
obj->preform(paramter1,paramter2);
关键区别:消息结构运行时所执行的代码由运行环境来决定;而函数调用则由编译器决定。
第二条
在类的头文件中尽量少引入其他头文件
1.@class的使用(向前引用)
2.#import避免循环引入
3.减少代码的耦合度
第三条
多用字面量语法,少用与之等价的方法
1.代码简洁,可读性高
第四条
多用类型常量,少用#define预处理指令
第五条
用枚举表示状态、选项、状态码
1.按位或操作符定义枚举选项
2.typedef定义枚举类型
第六条
理解属性概念
1.属性为对象特性,记录对象数据的产物
2.属性特质,用于修饰属性特性,常见属性特质(atomicity,noatomic,readwrite等等)
3.getter 和 setter方法
第七条
对象内部尽量直接访问对象实例变量
1.不经由OC的“方法派发”(method dispatch)直接访问实例变量速度快
2.直接访问实例变量不会访问setter方法
3.不触发键值观察(KVO)
4.通过属性访问有助于错误排除
第八条
理解“对象等同性”
1.isEqual和hash方法
2.相同的对象具有相同的哈希吗,但是哈希码相同的对象却未必相同
3.hash时要慎重
第九条
以“类族模式”隐藏实现细节
1.类族模式可以实现细节隐藏
2.系统架构中经常使用
3.从类族的公开抽象基类中继承子类时要当心
第十条
在既有类中使用关联对象存放自定义数据
1.可以通过“关联对象”机制来把两个对象连接起来
2.定义关联对象时可指定内存管理语义,定义属性的特质
3.只有在其他做法不可行时才应选用关联对象,此种做法会引入难以查找的bug
第十一条
理解objc_msgSend的作用
1.消息由接受者、选择子及参数构成
2.发给某对象的全部消息都由“动态消息派发系统”来处理