Re: [問題] 簡單的程式就有 memory leak 了

作者: darktt (小朱)   2014-04-16 05:58:04
iOS 的記憶體的回收機制並不是你在程式中寫 Release 就會馬上釋放的,
而是要到垃圾回收機制 (garbage collection) 開始的時候才會回收
Retain count 是 0 的物件。
所以在 ViewController 切換的時候記憶體使用量會短暫的增加都是正常的,
而且在 iOS 中 ViewController 切換之後,上一個畫面的 ViewController
並不會被 Release,會保留在記憶體中直到它被 dismiss 之後才會被釋放,
如果這層 ViewController 是第一層的話那就永遠不會被釋放掉了。
作者: Blueshiva (龍野南雲)   2014-04-16 08:17:00
其實ARC跟GC是有差別的,應該說Apple現在放棄用GC的機制回頭用Ref Counter,但是用PreProcessing幫你加上retainrelease,而檢查釋放的時機,則是run loop結束的時候
作者: atst2 (atst2)   2014-04-16 08:30:00
正確的來講,釋放的時機是autorelease pool結束時而autorelease pool預設只有一個,要自己控制時機得自己加@autorelease 區塊(arc)
作者: ishuen (小小宇)   2014-04-16 08:37:00
所以設定爲nil也不會馬上釋放嗎?如果只有一個reference的話?
作者: whitefur (白毛)   2014-04-16 09:11:00
iOS是ARC不是GC....http://0rz.tw/8VxR6 推這篇
作者: Blueshiva (龍野南雲)   2014-04-16 11:42:00
RefCount降到0也不會馬上刪除,必須等autorelease pool要刪除的時候才會一起檢查,一起刪除
作者: HuangJC (吹笛牧童)   2014-04-16 19:24:00
但我還真看不出我的程式可以在哪加 @autorelease雖然是第一個畫面喚起第二個畫面,第二個畫面 close退回第一個畫面;但進入及退出卻不是口袋型的,code沒有明確的堆疊那我就找不到一個地方去加 @autorelease當初在書上讀到 autorelease 還覺得很酷咧,感覺很方便
作者: xinya707 (媽我在這)   2014-09-17 14:40:00
Days matter 倒數忌日都有記日
作者: Decill (inner peace)   2014-09-17 14:44:00
一樓我知道是輸入法問題 不過我還是忍不住笑了
作者: happyfuture (!)   2014-09-17 14:46:00
1F好嚇人阿XD

Links booklink

Contact Us: admin [ a t ] ucptt.com