作者darktt (小朱)
看板MacDev
標題Re: [問題] 簡單的程式就有 memory leak 了
時間Wed Apr 16 05:58:04 2014
iOS 的記憶體的回收機制並不是你在程式中寫 Release 就會馬上釋放的,
而是要到垃圾回收機制 (garbage collection) 開始的時候才會回收
Retain count 是 0 的物件。
所以在 ViewController 切換的時候記憶體使用量會短暫的增加都是正常的,
而且在 iOS 中 ViewController 切換之後,上一個畫面的 ViewController
並不會被 Release,會保留在記憶體中直到它被 dismiss 之後才會被釋放,
如果這層 ViewController 是第一層的話那就永遠不會被釋放掉了。
--
#1ID_Wqk2 (iPhone) [ptt.cc]
[問題] 記錄天數的app
1F:推 xinya707:Days matter 倒數忌日都有 09/17 14:40
2F:→ xinya707:記日 09/17 14:41
3F:→ Decill:一樓我知道是輸入法問題 不過我還是忍不住笑了 09/17 14:44
4F:→ happyfuture:1F好嚇人阿XD 09/17 14:46
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.58.105.166
※ 文章網址: http://webptt.com/m.aspx?n=bbs/MacDev/M.1397599090.A.039.html
5F:推 Blueshiva:其實ARC跟GC是有差別的,應該說Apple現在放棄用GC的機制 04/16 08:17
6F:→ Blueshiva:回頭用Ref Counter,但是用PreProcessing幫你加上retain 04/16 08:18
7F:→ Blueshiva:release,而檢查釋放的時機,則是run loop結束的時候 04/16 08:19
8F:→ atst2:正確的來講,釋放的時機是autorelease pool結束時 04/16 08:30
9F:→ atst2:而autorelease pool預設只有一個,要自己控制時機得自己加 04/16 08:31
10F:→ atst2:@autorelease 區塊(arc) 04/16 08:31
11F:推 ishuen:所以設定爲nil也不會馬上釋放嗎? 04/16 08:37
12F:→ ishuen:如果只有一個reference的話? 04/16 08:38
13F:推 whitefur:iOS是ARC不是GC.... 04/16 09:11
15F:→ Blueshiva:RefCount降到0也不會馬上刪除,必須等autorelease pool 04/16 11:42
16F:→ Blueshiva:要刪除的時候才會一起檢查,一起刪除 04/16 11:42
17F:推 HuangJC:但我還真看不出我的程式可以在哪加 @autorelease 04/16 19:24
18F:→ HuangJC:雖然是第一個畫面喚起第二個畫面,第二個畫面 close退回第 04/16 19:24
19F:→ HuangJC:一個畫面;但進入及退出卻不是口袋型的,code沒有明確的堆疊 04/16 19:25
20F:→ HuangJC:那我就找不到一個地方去加 @autorelease 04/16 19:25
21F:→ HuangJC:當初在書上讀到 autorelease 還覺得很酷咧,感覺很方便 04/16 19:26