3三、使用类别把类的实现拆分红不一样的文件编程
- 一、利用类别机制,可将同一个类的实现,由一个常规的实现文件(.m)拆分红多个实现文件(.m)
- 二、把同一个类的实现文件(.m)拆分红多个实现文件(.m),适合类的实现文件大多比较庞大。
- 三、把同一个类的实现文件(.m)拆分红多个实现文件(.m),拆分的标准可能是以同类型或同业务类型等来做为参照。
3四、明智地使用内省可以使程序更加高效和健壮框架
- 一、内省是对象揭示本身做为一个运行时对象的详细信息的一种能力,这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否能够相应特定的消息。
- 二、内省有助于避免错误地进行消息派发、错误地假设对象相等,以及类此的问题。
- 三、NSObject协议和类定义了不少内省方法,用于查询运行时信息,以便根据对象的特征进行识别,例如isEqual方法,可用来比较对象。
- 四、在Cocoa框架的全部isEqualToType:方法中,nil都不是正当的参数,这些方法的实如今接收到nil参数时会抛出异常。然而为了向后兼容,Cocoa框架中的isEqual:方法能够接收nil值,在这种状况下返回NO。
3五、尽可能使用不可变形对象而非可变性对象指针
- 一、尽可能不要把可变对象存储到集合对象中,不然容易致使存储的可变对象被破坏或变成无效。
- 二、在开销上,可变对象比不可变对象要大,由于可变对象必须动态管理管理一个可变的辅助存储——在必要时分配或解除分配内存块,因此比相应的不可变版本效率低。
- 三、不能肯定对象是否可变,则将它当成不可变处理。
3六、利用复合能巧妙地把两个类或两个对象融合对象
- 一、在OOP编程中有两个技术用于描述类与类或对象与对象之间的关系,一个是继承,一个是复合
- 二、复合式经过在类中声明一个指向另外一个类对象的指针做为实例对象,从而将这两个类进行复合。
- 三、使用new建立对象的时候,实际发生了两个步骤:第一个步骤,为对象分配内存,也就是说对象得到存储其实例变量的内存块;第二步,就是自动调用init方法,初始化对象使其处于可用状态。没有被初始化的指针都使nil。
- 四、在Objective-C中全部对象之间的交互都是经过指针实现的。
3七、使用类扩展来隐藏实现的细节继承
- 一、类扩展,从必定程度而言,可称为匿名类别。
- 二、利用类扩展隐藏私有信息。
- 三、若是打算将“私有”的方法或属性用来选择相关的类,能够在单独的头文件中声明类扩展,并把其导入到须要它的源文件中。
3八、使用内联块应注意避免循环引用内存
- 一、在内联块中能直接引用self,但要注意避免致使循环引用。
- 二、避免因为在内联块中直接引用self致使的循环引用,较好的方式,引进弱引用来防护。
- 三、在非内联块不能直接访问self,只能经过将self看成参数传递到块中,才能使用,而且此时的self只能经过setter或getter方法访问其属性,不能使用句点式方法。
3九、利用类别把方法添加到现有的类
40、经过强弱引用来管理对象的是全部权get
- 一、__weak对面是__strong。一样,没必要明确指定__strong的,由于它是默认的。
- 二、父对象应该__strong引用子对象,子变量应该__weak引用父对象。
- 三、只要该变量是在范围内,变量就会保持对象的__strong的引用,或直至它被从新分配给另外一个对象或nil。
- 四、对一些不支持__weak引用的类,可经过Unsafe Unretained引用来暗度陈仓。
- 五、使用__weak引用来避免循环retain。