作者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/cn.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