Re: [問題] 何時需要release

看板MacDev作者 (星空下的鮪魚)時間16年前 (2009/09/04 19:29), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/5 (看更多)
※ 引述《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, 而另一種,如 NSNumber裡的method 有number開頭, UIImage裡頭用Image開頭的,NSStringstring開頭的 像這一類的method,他們method在回傳時,都會有autorelease, 所以不要做release的動作。 而因為autorelease的影響,所以有個method可以取得ref count的, 用那個做為debug時,有沒有做release的判斷,並不是很好的方法。 文件是建議,用同樣的method命名規則, 也就是說,需要由caller做release的話, 命名就應該帶有copy這一類的關鍵字。 -- 不先商議,所謀無效; 謀士眾多,所謀乃成。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.59.242
文章代碼(AID): #1AeFemE3 (MacDev)
文章代碼(AID): #1AeFemE3 (MacDev)