---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
内存管理——autorelease
1、autorelease方法(半自动)
1>延迟对象的释放时间,只有是等pool销毁以后才会释放对象。
2>autorelease方法返回对象本身
3>autorelease会将对象放入到一个自动释放池中
4>OC程序在运行时会自动创建一个自动释放池
5>当自动释放池被销毁,会对池子里的所有对象做一次release操作。
6>调用完autorelease方法后,对象的计数器不变
2、自动释放池的创建
1>Xcode5.0以后的创建方法
@autoreleasepool
{//释放池创建
//所有的代码
}//释放池销毁
2>释放池可以无限嵌套
int main()
{
autoreleasepool
{
//释放池1
autoreleasepool
{
}
//释放池2
autoreleasepool
{
}
}
return 0;
}
3、autorelease类方法
在开发过程中我们通常会提供一些类方法,来快速创建autorelease对象(对象并放进释放池)
+ (id)person
{
return [[[self alloc] init] autorelease];
}
+ (id)personWithAge:(int)age
{
Person *p = [[[self alloc] init] autorelease];
p.age = age;
return p;
}
4、注意
1>系统自带的方法里面没有包含alloc,new,copy,说明返回的对象都是autorelease过的。
2>设计方法的时候,方法名是以类名开始的。
5、小零碎
1>autorelease可以不用关心对象的释放。
2>不能精确控制对象释放,占用内存比较大的对象不要使用autorelease,因为只有池子释放才能够释放对象,这样可能大内存不能够及时释放,影响性能。
3>不能再autorelease方法后,不能再调用release或者autorelease
4>在程序运行当中会生成无数个autoreleasepool在栈中(特定栈)
5>新生成的autoreleasepool在栈顶。
6>开发当中经常会提供一些类方法来快速创建一个autorelease对象。
7>创建类方法时,创建对象不要直接使用类名,一般使用self