黑马程序员-----内存管理(五)

---------------------- 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

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值