【发布时间】:2012-01-03 22:04:54
【问题描述】:
我有一个例程来正确分配和取消分配我的 UIView 子类,但是当我在该类的 - (void) dealloc 中设置断点时,我发现它没有被调用并且我有一个巨大的内存泄漏。
所以我在发布之前打印了retainCount,它是2(这可能是正常的,因为其他对象可以使用它)。我搜索并没有看到任何其他retain 消息。然后我发送:
[myObject removeFromSuperview];
现在它被释放了。这让我意识到我之前发送了:
[self.view bringSubviewToFront:myObject];
很难知道当我使用bringSubviewToFront: 时,我总是必须调用removeFromSuperview。是否存在其他类似的方法可以增加保留计数?
如果这个对象不是一个子类,而只是一个UIView,我永远不会知道我造成了内存泄漏。
那么,我怎样才能真正知道我的对象已经被释放并且内存是空闲的呢?
知道发生了什么对我来说并不重要,但我想知道我正在创建和删除对象。这是一个演示,带有和不带有removeFromSuperview 的相同代码会导致我看到的效果——这是我的日志。
当我不使用removeFromSuperview时,
Memory used 16687.1 ( +5378), free 262213.6 kb
Memory used 19451.9 ( +2765), free 257159.2 kb
Memory used 19451.9 ( +0), free 259530.8 kb
Memory used 21844.0 ( +2392), free 257830.9 kb
Memory used 24313.9 ( +2470), free 256356.4 kb
Memory used 25260.0 ( +946), free 253141.0 kb
Memory used 27848.7 ( +2589), free 252874.8 kb
Memory used 30142.5 ( +2294), free 250814.5 kb
Memory used 30814.2 ( +672), free 247787.5 kb
你可以看到内存使用量只会增加,但是当我确实使用它时:
Memory used 16105.5 ( +4829), free 262619.1 kb
Memory used 16527.4 ( +422), free 262815.8 kb
Memory used 14168.1 ( -2359), free 262832.1 kb
Memory used 16769.0 ( +2601), free 263266.3 kb
Memory used 16560.1 ( -209), free 264785.9 kb
Memory used 14200.8 ( -2359), free 264794.1 kb
Memory used 16789.5 ( +2589), free 264290.3 kb
Memory used 16597.0 ( -193), free 264499.2 kb
Memory used 14237.7 ( -2359), free 264515.6 kb
Memory used 16609.3 ( +2372), free 264290.3 kb
Memory used 16560.1 ( -49), free 264425.5 kb
Memory used 14200.8 ( -2359), free 264441.8 kb
现在内存随我的意愿增加和减少。
我从https://stackoverflow.com/q/7990532/632472 获得了记录内存使用情况的代码。
【问题讨论】:
-
大声笑..我的英语语法有一些问题:(
标签: objective-c cocoa-touch memory-management memory-leaks