Re: [問題] property/synthesize之後...

看板MacDev作者 (←這人是超級笨蛋)時間15年前 (2009/12/23 00:36), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串3/7 (看更多)

12/22 23:52,
順便想問一下下面兩個語意是否相同:
12/22 23:52

12/22 23:53,
self.A = nil;
12/22 23:53

12/22 23:53,
[A release]; //A為物件變數
12/22 23:53

12/22 23:54,
在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

12/23 19:20, , 1F
謝謝 :)
12/23 19:20, 1F

12/27 00:46, , 2F
不過蠻好奇的 會使用setA:nil來relase的特殊情況有哪些
12/27 00:46, 2F

12/27 00:46, , 3F
如果有實際例子能夠提供的話 小弟感激不盡
12/27 00:46, 3F

12/27 11:22, , 4F
GC
12/27 11:22, 4F
文章代碼(AID): #1BCFMJRg (MacDev)
討論串 (同標題文章)
文章代碼(AID): #1BCFMJRg (MacDev)