iOS内存管理之NSAutoreleasePool

本文详细介绍了NSAutoreleasePool的工作原理,包括其作为对象引用计数自动处理器的角色、与线程的关系、创建时机以及异常情况说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:NSAutoreleasePool实际上是个对象引用计数自动处理器。NSAutoreleasePool可以同时有多个,它的组织是个栈,总是存在一个栈顶pool,也就是当前pool,每创建一个pool,就往栈里压一个,改变当前pool为新建的pool,然后,每次给pool发送drain消息,就弹出栈顶的pool,改当前pool为栈里的下一个 pool。

2:NSAutoReleasePool 和 线程

    每个线程都拥有一个栈,这个栈存储的都是pool对象,对NSObject和其子类发送autorelease消息,都会将这个对象放进执行这个消息所在线程的栈顶的pool中,等到[pool release]的时候,对pool中栈数据结构中存储对象按照先进后出的顺序进行遍历,对每个对象发送一条release消息;


控制台确认AutoreleasePoolPage 类的情况如下:



3. 何时创建NSAutoReleasePool
   <1>.在自动生成的xcode工程当中,在main方法的开始会创建一个, 然后main结束即主线程 thread退出时释放。
   <2>.run loop的每次iteration即迭代 中在每个事件循环(event loop)的开始会创建一个, 在结束时会销毁, 这样就能及时的释放内存,事件循环中包含有触摸,用户输入,网络接收数据包含socket和异步回调NSUrlConnection,定期或时间延迟时间(NSTimer),这样即使没有手动创建,在程序运行的过程中也会时刻在释放内存.
4:如果 是autoreleasePool NSAutoreleasePool 对象的话会发生异常

异常显示为:

通常在使用Objective-C 也就是Foundation框架时,无论调用哪一个对象的autorelease 实例方法,实际上调用的都是NSobject 类的autorelease 实例方法,但是对NSAutoreleasePool类,autorelease 实例方法已被该类重载,因此运行时就会出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值