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

看板MacDev作者 (小朱)時間10年前 (2014/04/16 05:58), 編輯推噓5(5012)
留言17則, 5人參與, 最新討論串2/4 (看更多)
iOS 的記憶體的回收機制並不是你在程式中寫 Release 就會馬上釋放的, 而是要到垃圾回收機制 (garbage collection) 開始的時候才會回收 Retain count 是 0 的物件。 所以在 ViewController 切換的時候記憶體使用量會短暫的增加都是正常的, 而且在 iOS 中 ViewController 切換之後,上一個畫面的 ViewController 並不會被 Release,會保留在記憶體中直到它被 dismiss 之後才會被釋放, 如果這層 ViewController 是第一層的話那就永遠不會被釋放掉了。 -- #1ID_Wqk2 (iPhone) [ptt.cc] [問題] 記錄天數的app

09/17 14:40,
Days matter 倒數忌日都有
09/17 14:40

09/17 14:41,
記日
09/17 14:41

09/17 14:44,
一樓我知道是輸入法問題 不過我還是忍不住笑了
09/17 14:44

09/17 14:46,
1F好嚇人阿XD
09/17 14:46
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.58.105.166 ※ 文章網址: http://www.ptt.cc/bbs/MacDev/M.1397599090.A.039.html

04/16 08:17, , 1F
其實ARC跟GC是有差別的,應該說Apple現在放棄用GC的機制
04/16 08:17, 1F

04/16 08:18, , 2F
回頭用Ref Counter,但是用PreProcessing幫你加上retain
04/16 08:18, 2F

04/16 08:19, , 3F
release,而檢查釋放的時機,則是run loop結束的時候
04/16 08:19, 3F

04/16 08:30, , 4F
正確的來講,釋放的時機是autorelease pool結束時
04/16 08:30, 4F

04/16 08:31, , 5F
而autorelease pool預設只有一個,要自己控制時機得自己加
04/16 08:31, 5F

04/16 08:31, , 6F
@autorelease 區塊(arc)
04/16 08:31, 6F

04/16 08:37, , 7F
所以設定爲nil也不會馬上釋放嗎?
04/16 08:37, 7F

04/16 08:38, , 8F
如果只有一個reference的話?
04/16 08:38, 8F

04/16 09:11, , 9F
iOS是ARC不是GC....
04/16 09:11, 9F

04/16 09:14, , 10F
04/16 09:14, 10F

04/16 11:42, , 11F
RefCount降到0也不會馬上刪除,必須等autorelease pool
04/16 11:42, 11F

04/16 11:42, , 12F
要刪除的時候才會一起檢查,一起刪除
04/16 11:42, 12F

04/16 19:24, , 13F
但我還真看不出我的程式可以在哪加 @autorelease
04/16 19:24, 13F

04/16 19:24, , 14F
雖然是第一個畫面喚起第二個畫面,第二個畫面 close退回第
04/16 19:24, 14F

04/16 19:25, , 15F
一個畫面;但進入及退出卻不是口袋型的,code沒有明確的堆疊
04/16 19:25, 15F

04/16 19:25, , 16F
那我就找不到一個地方去加 @autorelease
04/16 19:25, 16F

04/16 19:26, , 17F
當初在書上讀到 autorelease 還覺得很酷咧,感覺很方便
04/16 19:26, 17F
文章代碼(AID): #1JJQjo0v (MacDev)
文章代碼(AID): #1JJQjo0v (MacDev)