MRC小测

来源:互联网 发布:快速学会唱歌 ktv 知乎 编辑:程序博客网 时间:2024/06/05 18:30

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

测试控件: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次。

0 0
原创粉丝点击