Re: [問題] 何時需要release
※ 引述《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開頭的,NSString用string開頭的
像這一類的method,他們method在回傳時,都會有autorelease,
所以不要做release的動作。
而因為autorelease的影響,所以有個method可以取得ref count的,
用那個做為debug時,有沒有做release的判斷,並不是很好的方法。
文件是建議,用同樣的method命名規則,
也就是說,需要由caller做release的話,
命名就應該帶有copy這一類的關鍵字。
--
不先商議,所謀無效;
謀士眾多,所謀乃成。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.59.242
討論串 (同標題文章)
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章