Dict.CN 在线词典, 英语学习, 在线翻译

学海苦作舟,书山勤为径

留下点回忆

导航

<2012年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

公告

Web Counter
Web Counter

留言簿(47)

随笔分类(126)

文章分类

随笔档案(151)

相册

阅读排行榜

评论排行榜

常用链接

统计

积分与排名

Denoise

English study

Web技术

数据压缩

一些连接

最新评论

UIViewController的retainCount(Object C)

1.UIViewController的retainCount在某些情况下表现的和我们看到的不太一样;例如下面的代码:
2.UIView * mainView = xxx;   
3.UIViewController * subVC = [[UIViewController alloc] init];//这里subVC的retainCount=1
4.[mainView addSubview:subVC.view];//这里subVC的retainCount =3,增加了2


Then later,
5.[subVC.view removeFromSuperview];   //这里subVC的retainCount为4;增加了1
6.[subVC release];//这里subVC引用计数为3,减少了1


实际上我们期待在6的时候subVC的引用计数为0,并且dealloc被调用,但实际上没有。那么为什么呢?

为了验证这个问题,我们将这个指针在指针在6之后保存下来:
UIViewController * temp = subVC;
作为一个全局变量。
等一段时间后,调用 temp.retainCount,这个时候代码会crash,这说明什么?
说明temp已经是无效的指针了。

到此可以证明UIViewController在做removeFromSuperView的时候是delay,并且做了一次autorelease(不知道出于说明目的,或许是为了防止动画),等所有动作完成,其将所有的retainCount减为0.

因此,上面的这种写法虽然最后retainCount不为0,但代码没有错,也没有内存泄露。因此只要保证进行了和分配添加相反地操作,内存就应该被释放的。

posted on 2012-10-29 14:54 笨笨 阅读(2008) 评论(0)  编辑 收藏 引用 所属分类: iOS