作者aecho (星空下的鲔鱼)
看板MacDev
标题Re: [问题] 何时需要release
时间Fri Sep 4 19:29:49 2009
※ 引述《leondemon (狗狗)》之铭言:
: ※ 引述《uranusjr (←这人是超级笨蛋)》之铭言:
: : 基本上是 (另外还有 new 和 mutableCopy, 剩下的我也没碰过, 文件上应该会写)
: : 至於什麽时候会被清除...
: : 任何物件在被创造时都会有 retain count = 1
: : 但如果创造途径不是上面那四种, 物件会在创造同时被放入 autorelease pool
: : 当程序清理 pool 的时候(每执行周期一次), 它们所占用的记忆体就会被清除
: : 基本上这代表这种物件 (暂时物件, temporary objects) 可以活过一个 method
: : 至少我是这样认为, 我没有正式学过计算机理论不太确定XD
: 感谢回应
: 所以说
: NSNumber *num1 = [NSNumber numberWithInteger: 100]; 时
: numberWithInteger中会执行alloc(retain count=1)、init其值、并self autorelase
: 然後再pool drain时 这个物件才会retain count-1 然後即被dealloc
: 我这样的理解对吗?
有一篇官方文件在讲记忆体的配置和释放,
印象中只要method name有 new, copy, 或是有alloc的,都需要release,
而另一种,如 NS
Number里的method 有
number开头,
UI
Image里头用Image开头的,NS
String用
string开头的
像这一类的method,他们method在回传时,都会有autorelease,
所以不要做release的动作。
而因为autorelease的影响,所以有个method可以取得ref count的,
用那个做为debug时,有没有做release的判断,并不是很好的方法。
文件是建议,用同样的method命名规则,
也就是说,需要由caller做release的话,
命名就应该带有copy这一类的关键字。
--
不先商议,所谋无效;
谋士众多,所谋乃成。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.59.242