Objective-C的自动释放池(autoreleasepool)、静态方法快速创建对象

自动释放池(autorelease pool)

1、是OC里面的一种内存自动回收机制,一般可以将一些临时变量添加到自动释放池中,统一回收
2、当自动释放池销毁时,池里面的所有对象都会调用一次release方法

方法:
(a)OC对象只需要发送一条autorelease消息,就会把这个对象添加到最近的自动释放池中(栈顶的释放池)

(b)autorelease实际上只是把release的调用延迟了,对于每一次autorelease,系统只是把对象放入了当时的
autorelease pool中,当该pool被释放时,该pool中的对象会被调用release。

//创建一个自动释放池
@autoreleasepool{
   Student * stu = [[Student alloc] init];

   [stu autorelease]; //这句的意思是把对象放到autoreleasepool 的池子中,不会改变对象计数器,只是把对象放到池子中
}

当自动释放池被销毁的时候,所有对象自动调用release方法

静态方法快速创建OC对象:

静态方法返回的对象,是自动释放的。不需要管理内存。因此,自己创建的静态方法,最好也要保证对象是自动释放的。

如果一个类要创建一个方法来快速创建对象的话,方法名和类名称一样,并且方法名小写
@interface Student:NSObject
//静态方法,快速创建给一个对象
+(id) student;

@end;

@implementation Student

+(id) student{
      Student * stu = [ [[Student alloc] init]  autorelease];
      return stu;
}
@end

int main(int argc, const char * argv[]){
     @autoreleasepool{
 Student * stu = [Student student];
     } 
}

使用自动释放池的注意事项:

1、在ARC环境下,不能使用[[NSAutoreleasePool alloc] init],而应当使用@autoreleasepool
2、在@autoreleasepool中要尽量避免用循环的方式创建大量对象。这样会造成内存峰值的上升
3、尽量避免对大内存使用该方法,对于这种延迟释放机制,还是尽量少用
4、sdk中一般利用静态方法创建并返回的对象都是已经autorelease的,不需要再进行release 操作

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值