ARC代码特性分析——《iOS 6编程实战》读书笔记(1)

2013-03-23


目前很多项目开展可能需要兼顾一些旧库或者项目,因此没有使用ARC,但ARC还是一个非常好的东西,不仅能够大大加快开发效率,内存溢出问题也大大减少,而且使用ARC编译的程序速度会更快。

ARC内部原理

ARC运用注意事项:

ARC是编译器的特性,工作在编译期,自动为代码的retain和release配对,而不是在运行期,因此与内存垃圾回收机制不一样。编写ARC代码需要注意以下几个问题:
  1. 不要调用retain, release和autorelease。也不可以覆盖这几个方法(以前写singleton经常会覆盖这几个方法来保证运行中只有一个实例对象)。
  2. dealloc方法内不释放实例变量。如需在dealloc时删除KVO等观察而需要重载dealloc时,不要调用[super dealloc]。
  3. C语言结构体中不要有对象指针。有些C语言结构中可能要包含对象,可以把它转换成void*类型来使用。因为假如代码后面调用了free方法来销毁一个C语言结构体,会影响到对结构体中对象的自动跟踪。
  4. id和void*类型只能通过桥接转换进行转换。在使用Core Foundation的代码中会有这种情况。
  5. 不要使用NSAutoreleasePool。不要手动创建自己的自动释放池,而应该使用@autoreleasepool{}代码块。注意:@autoreleasepool比NSAutoreleasePool快了大约20倍。
  6. 需要注意命名规范。由于ARC是编译期检查代码进行工作的,假如以copy,retain等前缀命名的方法的话,ARC会自动在在该方法上进行retain,在调用的时候release,会影响效率,而且当方法和调用者没有一起使用ARC时会出现野指针或者内存溢出的问题。需要注意,符合驼峰式大小写方式命名的copyRight会有这个问题,而copyright不会有这个问题。
  7. 注意在Block中的循环引用。 </ol> 编写完代码之后,可以使用Xcode的Edit->Refactor->Convert to Objective-C ARC来检查或者转换。</p>

    23 Mar 2013



Previous     Next
jaminzzhang /
Published under (CC) BY-NC-SA in categories
Tagged with