作者:
darktt (小朱)
2014-04-16 05:58:04iOS 的記憶體的回收機制並不是你在程式中寫 Release 就會馬上釋放的,
而是要到垃圾回收機制 (garbage collection) 開始的時候才會回收
Retain count 是 0 的物件。
所以在 ViewController 切換的時候記憶體使用量會短暫的增加都是正常的,
而且在 iOS 中 ViewController 切換之後,上一個畫面的 ViewController
並不會被 Release,會保留在記憶體中直到它被 dismiss 之後才會被釋放,
如果這層 ViewController 是第一層的話那就永遠不會被釋放掉了。
其實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的話?
RefCount降到0也不會馬上刪除,必須等autorelease pool要刪除的時候才會一起檢查,一起刪除
作者:
HuangJC (吹笛牧童)
2014-04-16 19:24:00但我還真看不出我的程式可以在哪加 @autorelease雖然是第一個畫面喚起第二個畫面,第二個畫面 close退回第一個畫面;但進入及退出卻不是口袋型的,code沒有明確的堆疊那我就找不到一個地方去加 @autorelease當初在書上讀到 autorelease 還覺得很酷咧,感覺很方便
作者:
Decill (inner peace)
2014-09-17 14:44:00一樓我知道是輸入法問題 不過我還是忍不住笑了