我有一个例程来正确分配和取消分配我的UIView
子类,但是当我在类的- (void) dealloc
中设置断点时,我看到它不被调用,I有一个巨大的内存泄漏。了解保留和释放以外的方法对保留计数的影响
所以我在发布之前打印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得到了记录内存使用情况的代码。
笑..我有一些问题,英语语法:( – Rodrigo