我有一個例程來正確分配和取消分配我的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