我想我有一個UIImage,它的保留計數比它應該有的更高,我可能會泄漏內存。我使用這個圖像作爲縮略圖,爲uibutton設置自定義背景。所以這個烏布頓有一個參考,我也是。但不是2,retainCount是3.我是否必須創建一個自定義的UIImage派生類並覆蓋dealloc,如果我想在那裏放置一條日誌消息,然後將UIImage中使用的類更改爲我的類,或者有更簡單的方法。提前致謝。我怎麼看dealloc是否被一個uikit對象或任何非我自己創建的對象所調用
回答
使用目標類上的類別來覆蓋dealloc並在其上設置斷點。
請注意,這是非常危險和極度灰心。在同一篇文檔中:「儘管當前語言允許使用類別來覆蓋類繼承的方法,甚至可以使用類接口中聲明的方法,但強烈建議您不要使用此功能。」 – 2010-06-18 16:20:41
當然在生產代碼中。爲了調試,我將使用一切使我的生活更加簡單:) – fraca7 2010-06-28 10:39:25
我建議你使用儀器中的「泄漏」工具。它會告訴你,如果你有泄漏,並給你所有你需要的信息。
更新:
我剛剛看WWDC 2010的視頻「未來驗證您的應用程序」,其中,關於OS 2.X [UIImage imageNamed:]
實際上有泄漏蘋果工程師的狀態保持數1比它應該。所以如果你的設備運行的是iPhone OS 2.x,那就是爲什麼!
是正確的,再加上你不應該看看對象的保留數。爲什麼UIImage的保留數比預期的要多,這裏有很多合理的理由。如果泄漏工具沒有顯示泄漏,請不要擔心。 – kubi 2010-06-17 10:45:33
我試過使用泄漏工具,這讓我更加困惑。我正在理解儀器泄漏的過程。這顯示我的「泄漏」不太可能是泄漏。那麼,即使是一個空的應用程序與幾個文本框和開關顯示爲泄漏。沒有添加代碼。 – 2010-06-18 08:55:14
你知道物體是否泄漏?這幾乎是總是一個壞主意,跳到基於保留計數的結論。使用Build &分析,泄漏等來確定您是否有問題。
如果你真的想要子類和日誌dealloc
,你可以,但實際上它會告訴你什麼?
- 1. 怎麼看一個對象是否被阻塞在Vb.net的Webbrowser
- 2. 爲什麼我被告知我的mySQLi對象是'非對象'?
- 3. 自殺:Objective-C對象自己調用自己的-dealloc方法
- 4. 我怎麼知道一個對象是否是唯一的
- 5. 自己創建一個ResultSet對象
- 6. 怎麼看我的變量對象
- 7. 構建我自己的SqlDataReader對象
- 8. 如何使用自己創建對象?
- 9. 我應該每次創建一個新對象還是創建一個對象?
- 10. 我怎麼能檢查對象是否符合一個接口
- 11. 如果我創建MyFile的對象,文檔對象將被自動創建
- 12. 是否有任何函數對象在STL中創建對象?
- 13. 是否可以爲我的所有對象創建一個通用的Repository類?
- 14. 調用一個非對象,實際上是一個對象
- 15. 每個JSpinner對象是否都有自己的Model對象?
- 16. 如何創建我自己的JavaScript對象?
- 17. OO設計:如果我是一個對象,我應該創建自己還是將使用我的東西
- 18. 我創建的對象數組是怎樣的一組空值?
- 19. ASP.NET創建我自己的類型以用於域對象
- 20. 是否有任何使用與對象的自我分配
- 21. 使用networkx與我自己的對象
- 22. 對象等於自我或空對象
- 23. 爲什麼我們不能創建我們自己的ostream對象
- 24. 在Node.js中,我是否在「Require」時創建一個新對象?
- 25. 我是否需要繼續創建一個圖形對象
- 26. 我怎麼能測試一個方法不被稱爲非模擬對象?
- 27. 是否resourceResolver.adaptTo創建新對象或返回緩存的對象
- 28. 是否可以確定一個對象是否被另一個對象引用?
- 29. 我應該將PDO對象傳遞給每個對象,還是爲每個對象創建一個新對象?
- 30. 我創建新引用同一個對象,而不是新的對象
你不應該跟蹤統計釋放自己,因爲系統增加和除了你自己的代碼引起的任何變化保持數中減去。由於這個原因,保留計數不能用於調試。 UIImage在幕後非常複雜,它們有一個緩存,所以它們的保留數量尤其是名義上的。相反,您應該簡單地將代碼中的每個保留與發佈進行配對。這樣做和保留計數自己照顧自己。 – TechZen 2010-06-17 13:09:36