autorelease简介
autorelease方法的基本作用
给对象发送一条autorelease消息,会将对象放到一个自动释放池中
当自动释放池被销毁时,会对池子里面的所有对象做一次release操作
会返回对象本身
调用完autorelease方法后,对象的计数器不变
autorelease的好处
不用在关心对象释放的时间
不用再关心什么时候调用release
autorelease的使用注意
占用内存较大的对象不要随意使用autorelease
占用内存较小的对象使用autorelease,没有太大影响
自动释放池
在iOS程序运行过程中,会创建无数个池子。这些池子都是以栈结构存在(先进后出)
当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池
autorelease的常见错误
alloc之后调用了autorelease,又调用release
Person *p = [[[Person alloc] init] autorelease];
[p release];
连续调用多次autorelease
Person *p = [[[[Person alloc] init] autorelease] autorelease];
autorelease和release使用对比
使用release
Book *book = [[[Book alloc] init] autorelease];
[book release];
使用autorelease
Book *book = [[[Book alloc] init] autorelease];
//不要再调用[book release];
autorelease的应用场合
1、一般可以为类添加一个快速创建对象的类方法
+ (id)book {
return [[[self alloc] init] autorelease];
}
外界调用[Book book]就可以获得和使用新建的Book对象,根本不用考虑在什么时候释放Book对象
2、一般来说,除了alloc、new或copy之外的方法创建的对象都被声明了autorelease
3、比如下面的对象都已经是autorelease的,不需要再release
NSNumber *n = [NSNumber numberWithInt:100];
NSString *s = [NSString stringWithFormat:@"jack"];
NSString *s2 = @"rose";