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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这一章,李明杰老师举了该在对象release后再去访问的做法,来证明set方法内做了非空判断后,再进行release和retain是安全的,但实际上及时你set方法这样做了,你在对象release后再去访问还是不安全的,为什么呢?不多说上代码。李老师代码如下:



为什么说即使这样写了set还是不安全呢?还是以李老师的例子来进行讲解:


所以最稳妥的做法是永远不要在release之后再去操作对象.

评分

参与人数 1黑马币 +2 收起 理由
星河鹭起 + 2

查看全部评分

5 个回复

倒序浏览
本帖最后由 doudou33420 于 2014-11-9 07:59 编辑

我觉得这里你思考的有些牵强了 你没有理解set方法写release的意义
在set方法写release绝对不是保证该对象永远不会出现野指针
他的作用是为了传递对象的那一方不用过多的去考虑他传递过来这个对象之后应如何处理
也正因为这样在set方法里写了release 就可以让它想传多少都不用担心
因为有set方法帮他管理他传递的这个对象内存的问题
所以他只需要在它的原作用域里做好对自己本身的内存管理就可以了  
也就是这里教给set方法来release 穿对象过来的那一方可以省很多事
当使用一个对象的时候可能显示不出set处理的好处
如果同时出现 car1 car2 car3 ------ car 1000  他们来回并且重复往里面传,
这需要开发者用多少脑力才能理清楚 他何时传了对象 何时在加一个release  
而且加这么多的release 很容易一不小心就出错, 而且  代码太冗余
在多个对象来回造访set的时候 这就立显SET处理真的很叼了
不管SET 处理 还是自己处理,  你还是要思考该对象的内存管理问题
所以不并不是放手不管了.   就算不用set处理  
你在原对象都做完处理的时候  在去调用被回收的对象.  那结果就不尽人意了
回复 使用道具 举报
虽然看的不是很明白,不过我会努力的。。
回复 使用道具 举报
不是很理解lz的意思,虽然这个是老师教的,但是实际上这个是苹果建议的官方写法。
回复 使用道具 举报
yuanlingqi 来自手机 中级黑马 2014-11-9 15:26:19
报纸
看清楚我在说什么吗?看清楚再回复。
回复 使用道具 举报
yuanlingqi 来自手机 中级黑马 2014-11-9 15:29:36
地板
本帖最后由 yuanlingqi 于 2014-11-9 17:55 编辑
doudou33420 发表于 2014-11-9 07:57
我觉得这里你思考的有些牵强了 你没有理解set方法写release的意义
在set方法写release绝对不是保证该对象永 ...

看清楚我在说什么吗?想做程序员必须严谨。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马