UIViewController的retainCount(Object C)

来源:未知 责任编辑:智问网络 发表时间:2013-11-04 19:43 点击:

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,但代码没有错,也没有内存泄露。因此只要保证进行了和分配添加相反地操作,内存就应该被释放的。

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • cocos2d-x学习笔记(19)--label 、label atlas
    • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
    • Cocos2d-x学习(一):HelloWorld
    • cocos2dx在xcode下开发,编译到android上(2)
    • cocos2d 设置屏幕默认方向
    • Cocos2d-x 2.0 之 Actions “三板斧” 之一
    • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
    • cocos2d-x学习笔记(18)--游戏打包(windows平台)
    • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1