首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

copy/assgin初记

2012-06-27 
copy/assgin小记?看网上的帖子,总觉得copy的说明偏于简单了,对后来人伤不起呐,虽然锅以前也是吸收着这些

copy/assgin小记

? 看网上的帖子,总觉得copy的说明偏于简单了,对后来人伤不起呐,虽然锅以前也是吸收着这些 营养"长大"的,现在算是回馈一下,本文适合有理解但是不深的道友.

? ? 首先说明几点:对于"NSString用copy"这样的"建议",其实是不对的,至少思路不对,因为本质上NSString的copy内部执行的是retain(后有说明),既然都是retain,又何必建议copy?所以说思路不对assign一般用于int/float等等这种简单变量是没错,但是本身property默认就是assgin,这样说了等于没说,所以assign应该强调其用处,即是为了防止循环引用(后有说明),"循环引用"的说法是我自己造的,看后面的说明就好理解了测试用的retainCount来输出计数,其实文档不建议使用:


Important:?This method is typically of no value in debugging memory management issues. Because any number of framework objects may have retained an object in order to hold references to it, while at the same time autorelease pools may be holding any number of deferred releases on an object, it is very unlikely that you can get useful information from this method.

?经常见到是用在controller/delegate上,比如说MyController和MyView,MyView在controller里面已经声明成retain,而MyView有些操作需要调用controller执行一下,那么MyView内部也需要个controller的引用,不过这个引用不能是retain的,retain有种"强引用"的味道,如果MyView"强引用"controller,而controller又"强引用"MyView,那岂不是MyView"强引用"自己了么?这样"循环引用"就有问题,所以得用assgin,即"弱引用",它会自动避免"循环引用"(估计系统底层自己实现的),总的来说就是A retain B之后,B就只能assgin A(不够严谨,说明问题即可)


? ? 好吧,没看懂不要紧,可能是我没写好...这只是抛砖引玉,姑且看之,能引起思考就更好


毫无痕迹的PS:带双引号的一些名词,是为了说明问题,对于它们的真正词义,与此文中的的关系不超过半毛钱,不必钻牛角尖

?

无力的PS:排版几经修改,最终还是发现这可视化编辑太扯淡了,勉强只能先这样了...

热点排行