您的位置:首页 > 其它

94,autorelease的介绍

2015-12-17 11:34 253 查看
#import <Foundation/Foundation.h>

@interface Person :
NSObject

-(void)run;

@end

@implementation Person

-(void)run{

NSLog(@"Run");

}

-(void)dealloc{

NSLog(@"%s",__func__);

[super dealloc];

}

@end

/*

1,autorelease的基本概念

autorelease是一种支持引用计数的内存管理方式,只要给队形发送一条autorelease消息会将对象放到一个自动释放池中,当自动释放池被销毁时,会对释放池中的对象进行一次release

注意:这里只是发送release消息,若当前的引用计数还为0,那么,该对象依然不会被释放

*/

int main(int argc,
const char * argv[]) {

//1,XCode5之后的,创建一个自动释放池

@autoreleasepool {

//创建对象,再释放对象

Person *person = [[Person
alloc]init];

person = [person autorelease];//只要调用autorelease,就不用调用release了,返回对象本身

[person run];

//创建对象并释放对象

Person *person1 = [[[Person
alloc]init]autorelease];

}

//2,XCode5之前的,创建一个自动释放池

NSAutoreleasePool *pool = [[NSAutoreleasePool
alloc]init];

//在这里写代码,

[pool release];

//>在IOS程序运行过程中,会创建无数个释放池,这些释放池由栈形式存在(先进后出)

//>当一个对象调用了autorelease方法时,会将这个对象放在栈顶的释放池中。

return 0;

}

//2015-12-17 10:11:04.217 1,autorelease[691:79551] Run

//2015-12-17 10:11:04.218 1,autorelease[691:79551] -[Person dealloc]

//Program ended with exit code: 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: