MRC小测

本文深入探讨了Autorelease机制的工作原理,特别是在事件循环中的表现。解释了何时对象会被自动释放,并通过一个UILabel的例子展示了如何正确使用Autorelease及Retain来确保对象的生命周期符合预期。

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

(感谢一位博主提供思路)

测试控件:uilabel,外加一个点击事件的btn


前言:The Application Kit creates an autorelease pool on the main thread at the beginning of every cycle of the event loop, and drains it at the end, thereby releasing any autoreleased objects generated while processing an event

也就是说在每个事件的开始时,Application Kit在main thread会自动创建一个autorelease pool,当这个事件结束时,会释放掉这个事件过程中所有产生的autoreleased的对象。 什么是事件呢,援引下面这段话:


Each external event triggers a cycle of the run loop e.g.  mouse event, key press, recepit of data on an asynchronous  HTTP connection etc. Also NSTimers,

也就是说,一个鼠标事件,键盘按下(MAC OSX),或者iphone上的触摸事件,异步http连接下后当接收完数据时,或者NSTimer的一次方法调用,都是一个事件。

所以,并非程序结束时,autoreleased的对象才会被释放。


 当我创建了一个UIlab,然后给这个UILab增加了一个Autorelease,那么,那么,当我在点击按钮事件的时候,这个UILab已经被释放。

如果我在添加Autorelase的时候,又给UILab,Retain。那么,UILab不被释放,并且引用计数为2(因为自己retain了一次,导致不被释放,保留引用计数)。所以我们如果我们要在按钮中使用这个UILab,我们需要Retain它,同时,在按钮事件需要release 2次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值