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

学海苦作舟,书山勤为径

留下点回忆

常用链接

统计

积分与排名

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 笨笨 阅读(1944) 评论(0)  编辑 收藏 引用 所属分类: iOS


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理