自动释放池

autorelease本质上就是延迟调用release方法


autorelease对象什么时候释放?

引用计数为0的时候才会释放, 不是出了pool就释放


在一些很消耗内存的循环调用的场景下有时需要手动干预autoreleased对象的释放时机, 不然会导致内存暴增, 最终导致程序崩溃


NSThread和NSRunLoop是一一对应的关系

在NSRunLoop对象的每个运行循环开始前,系统会自动创建一个autoreleasepool,并在运行循环结束时drain掉这个pool, 同时释放掉所有autoreleased对象

autoreleasepool只会对应一个线程, 每个线程可能会对应多个autoreleasepool


使用block版本的枚举时候,内部会自动添加一个autoreleasepool

普通的for循环forin循环没有,所以还是新版的block更方便, 但新能还是forin更高


1.如果你编写的程序不是基于UI框架的比如命令行工具

2.for循环中遍历生产大量autorelease变量时, 就需要手动添加局部autoreleasepool来进行手动干预

3.如果你创建一个子线程, 一般会自定义继承自NSOpertaion的操作, 在main方法中要加上, 子线程上是无法访问主线程的自动释放池所以的自己创建

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值