A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1722413885 中级黑马   /  2014-4-8 17:40  /  1442 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 1722413885 于 2014-4-8 23:58 编辑

[super release];这段代码的是什么意思,是怎么运行的,为什么要放到最后?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
[super release]调用父类的release方法,释放一次对象,retaincount-1;
在对象释放之前,可能要做点什么,比如nslog(@"dasdsa");什么的。
如果放在前面,对象可能已经被销毁了。
回复 使用道具 举报
[super release]; // 用来释放父类对象的内存资源

放在最后的原因:
[super release];如果放在前面的话,后面子类方法的调用可能要用到父类的资源,而发现父类的资源已经释放,就会报错,顾放在最后。
回复 使用道具 举报
本帖最后由 程浩 于 2014-4-8 18:09 编辑

[super release] 放在最后也是因为逻辑上好处理
写代码的时候你把创建父类的子类对象时retain和这个对应一下,然后在这中间写上你的代码,不是容易理解和处理么
而且就像三楼说的,你不放在最下面,而是放在你操作父类对象代码的前面就release,刚好减成了0,那么你就用不了父类方法了,还会出僵尸对象和野指针的可能,所以,放在最后吧

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马