作者uranusjr (←这人是超级笨蛋)
看板MacDev
标题Re: [问题] property/synthesize之後...
时间Wed Dec 23 00:36:33 2009
1F:推 leondemon:顺便想问一下下面两个语意是否相同: 12/22 23:52
2F:→ leondemon:self.A = nil; 12/22 23:53
3F:→ leondemon:[A release]; //A为物件变数 12/22 23:53
4F:→ leondemon:在dealloc的时候 要release物件变数 两者是否都可使用? 12/22 23:54
使用 setter 的时候会 release 旧值, 所以在最常见的状况下,
[self setA:nil];
会使得 A 的旧值被 release, nil 被 retain (which means nothing happens)
所以效果会一样
用 setter 把值指向 nil 的额外好处是
若你不小心在其他地方搞出 memory leak(或者要考虑多执行绪之类的), 那麽
[A release];
可能会让 A 的值被保留
而如果你在之後的程式里「预期」A 不存在(nil)而使用很方便的
「对 nil 呼叫 method 等於什麽事情都没发生」这个功能
那就可能会出现很奇怪的 bug...
但是, 用 setter 设定 nil 的问题是,
A 的 setter 可能做了其他事情
这对於程式码的後续维护会造成风险
如果我没记错的话, 一般的建议(by Apple)是尽量在这里用 release
只有在某些特殊需求里有用特例的方法特别规定要用 setA:nil
--
"问おう、贵方が私のマスターか?"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.81.146
5F:推 leondemon:谢谢 :) 12/23 19:20
6F:推 leondemon:不过蛮好奇的 会使用setA:nil来relase的特殊情况有哪些 12/27 00:46
7F:→ leondemon:如果有实际例子能够提供的话 小弟感激不尽 12/27 00:46
8F:→ zonble:GC 12/27 11:22