解决方案 »

  1.   

    因为ARC实际上是基于编译时和运行时的,编译时的部分就类似于我们以前手动管理的方式,除了手动调用release,也要依赖自动释放池。ARC让我们不用手动调用release,是因为它在某些情况下能在编译时插入release语句,如以下情况:
    (
        NSObject *obj = [[NSObject alloc] init];
       // 自动插入[obj release];
    )
    但在有些情况下,一个变量会横跨几种作用域,这就需要在运行时判断了(依赖于自动释放池的管理)。
    你可以看看这本书《Objective-C高级编程:iOS与OS X多线程和内存管理》