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