1.属性
a.属性(property)是objective-C的一项特性,用于封装数据。
b.使用属性,编译器会自动合成(autosynthesis)访问方法和相应的实例变量(下划线开头的)
c.属性特质(原子性,读写权限,内存管理语义,方法名)
2.在对象内部尽量直接访问实例变量
a.直接访问实例变量,不经过方法派发(method dispatch),不调用设置方法,不触发KVO,更快。
b.初始化和dealloc方法中,要使用实例变量来读写数据,因为设置方法有可能被子类覆写(override)
c.惰性初始化,要通过属性来访问
3对象的同等性
a.==只比较了指针本身(内存地址)
b.应该使用 isEqual: 方法来比较
4.以“类族模式”隐藏实现细节
a.类族模式可以把实现细节隐藏在一套简单的公共接口后面
b.系统框架经常使用类族(NSArray)
5.使用关联对象存放自定义数据
a.可以通过“关联对象”机制来把两个对象连起来
b.在非匿名分类中,扩展属性
6.理解objc_msgSend
其原型 void objc_msgSend(id self,SEL cmd,…)
7.消息转发机制
a.动态方法解析(resolveInstanceMethod)
b.备援接受者(forwardingTargetForSelector)实现多重继承,消息转发链
c.完整消息转发(forwardInvocation)
8.用“方法调配技术”调试 黑盒方法
9.理解“类对象”的用意
a.每个实例都有一个指向Class对象的指针,用以表示其类型,而这些class对象则构成了类的继承体系
b.用 类型信息查询方法 来确定对象类型,不要直接比较类的对象