ARC使用规则

1. ARC有效时 禁止使用retain或者release代码

2. 不能使用NSAllocateObject/NSDeallocObject代码

使用alloc方法会通过`NSAllocateObject`函数生成并持有对象,但是在ARC有效时禁止使用类似函数

3. 要遵守内存管理命名规则

  1. 在ARC和非ARC环境下,以allocnewcopymutableCopy开头的方法 应该返回调用者应当持有的对象
  2. 在ARC环境下 以init开头的方法必须为构造器方法

4. 不要显式调用dealloc

在ARC有效时,不需要调用`super dealloc`

5. 用@autoreleasepool 代替 NSAutoreleasePool

在ARC无效时也推荐使用@autoreleasepool block

6. 不能使用NSZone

7. 对象型变量不能作为C语言结构体成员

因为OC变量由编译器负责ARC的生命周期,但是C语言中没有对结构体成员的生存周期。因此,如果要在结构体中使用OC变量,可以将变量显式转换为`void *`类型(见下一条),或者使用`__unsafe__retained`修饰符(使用此修饰符表示其不属于编译器内存管理的对象)

8. 显式转换id和void *

详情见CoreFoundation和Foundation对象转换