0c-34-自动释放池

#import <Foundation/Foundation.h>
#import "Person.h"
Person * creatPerson()
{
    Person *p = [[Person alloc] init];
    return p;
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //Person *P0 = creatPerson();//[[Person alloc] init]只能由p0释放,但是是p创建的违反了谁创建谁释放原则。
        
        // autorelease:当对象调用这个方法时,就把对象放到了自动释放池中,延迟释放。
        Person *P = [[[Person alloc] init] autorelease];
        P.age = 10;
        [P retain]; // 2
        
        // 不关注对象什么时候被释放.
        Person *p1 = [[[Person alloc]init] autorelease];
        p1.age = 100;
        [p1 retain];
        
    }// 出了花括号,会对池子里面的所有调用了autorelease方法的对象,做一次release操作.
    return 0;
}

自动释放池的嵌套使用:

#import <Foundation/Foundation.h>

// 以栈的结构进行存储的,先进后出
int main(int argc, const char * argv[]) {
  // 1号池子
    @autoreleasepool {
        //2号池子
        @autoreleasepool {
            //3号池子
            @autoreleasepool {
                Person *p = [Person new];
            }
        }
    }
    //3号池子先释放,1号池子最互释放。
    return 0;
}
原文地址:https://www.cnblogs.com/yaowen/p/5315109.html