#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; }