码迷,mamicode.com
首页 > 其他好文 > 详细

编写高质量代码-OC 第5章 实现

时间:2015-11-08 14:04:50      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

33、使用类别把类的实现拆分成不同的文件

  • 1、利用类别机制,可将同一个类的实现,由一个常规的实现文件(.m)拆分成多个实现文件(.m)
  • 2、把同一个类的实现文件(.m)拆分成多个实现文件(.m),适合类的实现文件大多比较庞大。
  • 3、把同一个类的实现文件(.m)拆分成多个实现文件(.m),拆分的标准多是以同类型或同业务类型等来作为参照。

34、明智地使用内省可使程序更加高效和健壮

  • 1、内省是对象揭示自己作为一个运行时对象的详细信息的一种能力,这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以相应特定的消息。
  • 2、内省有助于避免错误地进行消息派发、错误地假设对象相等,以及类此的问题。
  • 3、NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别,例如isEqual方法,可用来比较对象。
  • 4、在Cocoa框架的所有isEqualToType:方法中,nil都不是正当的参数,这些方法的实现在接收到nil参数时会抛出异常。然而为了向后兼容,Cocoa框架中的isEqual:方法可以接收nil值,在这种情况下返回NO。

35、尽量使用不可变形对象而非可变性对象

  • 1、尽量不要把可变对象存储到集合对象中,否则容易导致存储的可变对象被破坏或变成无效。
  • 2、在开销上,可变对象比不可变对象要大,因为可变对象必须动态管理管理一个可变的辅助存储——在必要时分配或解除分配内存块,所以比相应的不可变版本效率低。
  • 3、不能确定对象是否可变,则将它当成不可变处理。

36、利用复合能巧妙地把两个类或两个对象融合

  • 1、在OOP编程中有两个技术用于描述类与类或对象与对象之间的关系,一个是继承,一个是复合
  • 2、复合式通过在类中声明一个指向另一个类对象的指针作为实例对象,从而将这两个类进行复合。
  • 3、使用new创建对象的时候,实际发生了两个步骤:第一个步骤,为对象分配内存,也就是说对象获得存储其实例变量的内存块;第二步,就是自动调用init方法,初始化对象使其处于可用状态。没有被初始化的指针都使nil。
  • 4、在Objective-C中所有对象之间的交互都是通过指针实现的。

37、使用类扩展来隐藏实现的细节

  • 1、类扩展,从一定程度而言,可称为匿名类别。
  • 2、利用类扩展隐藏私有信息。
  • 3、如果打算将“私有”的方法或属性用来选择相关的类,可以在单独的头文件中声明类扩展,并把其导入到需要它的源文件中。

38、使用内联块应注意避免循环引用

  • 1、在内联块中能直接引用self,但要注意避免导致循环引用。
  • 2、避免由于在内联块中直接引用self导致的循环引用,较好的方式,引进弱引用来防御。
  • 3、在非内联块不能直接访问self,只能通过将self当作参数传递到块中,才能使用,并且此时的self只能通过setter或getter方法访问其属性,不能使用句点式方法。

39、利用类别把方法添加到现有的类
40、通过强弱引用来管理对象的是所有权

  • 1、__weak对面是__strong。同样,不必明确指定__strong的,因为它是默认的。
  • 2、父对象应该__strong引用子对象,子变量应该__weak引用父对象。
  • 3、只要该变量是在范围内,变量就会保持对象的__strong的引用,或直至它被重新分配给另一个对象或nil。
  • 4、对一些不支持__weak引用的类,可通过Unsafe Unretained引用来暗度陈仓。
  • 5、使用__weak引用来避免循环retain。



编写高质量代码-OC 第5章 实现

标签:

原文地址:http://www.cnblogs.com/shentian/p/4946664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!