------Java
培训、Android培训、
iOS培训、.Net培训、期待与您交流! -------
基本用法;
1,autorelease 方法会返回对象本身
2,调用完autorelease方法后,对象的计数器不变
2,autorelease 会将对象放到一个自动释放池中
3,当自动释放池被销毁时,会对池子里面的所有对象做一次release操作
autorelease的好处:
1》不用再关心对象释放的时间
2》不用再关心什么时候调用release
autorelease的使用注意:
1》占用
内存较大的对象不要随便使用autorelease;
2>占用用内存较小的对象使用autorelease,没有太大的影响
错误写法:
1》alloc之后调用了autorelease,又调用了release
@autoreleasepool
{
Person * p = [ [ [Person alloc] init] autorelease]
[ p release];
}
2》连续调用多次autorelease
@autoreleasepool
{
Person * p =[ [ [ [Person alloc] init] autorelease] release]
}
自动释放池:
1》在IOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构存在(先进后出)
2》当一个对象调用autorelease方法时,会将这个对象放到栈顶的释放池
自动释放池的创建方式:
1》IOS5.0之前:
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[pool release] ; // [pool drain];
2>IOS5.0开始
@autoreleasepool
{
}
1,系统自带的方法里没有包含alloc, new , copy,说明返回的对象都是autorelease,如NSString * s = @"adaf";
2,开发中经常回提供一些类方法,快速创建一个已经autorelease过的对象
1》
创建对象时不要直接用类名,一般用self
+(id) person
{
return [ [ [self alloc] init ] autorelease];
}
int main ( ) {
@autoreleasepool//必须加池子
{
Person * p =[ [ [Person alloc] init ] autorelease];
}
}
可以在
创建类方法精简Person的初始话:
+(id) person
{
return [ [ [Person alloc] init ] autorelease];
}