我正在使用工具檢查IOS應用程序的內存使用情況,並發現CFString不斷分配和增長。在我的代碼中創建NSString對象時,我使用了StringWithFormat方法,不像[[NSString alloc] init]。我怎樣才能阻止呢? 以下圖像是儀器輸出的屏幕截圖。在iOS應用程序中CFString(不可變)內存使用量不斷增加
請告訴我,如果缺少問題的必要信息。
我正在使用工具檢查IOS應用程序的內存使用情況,並發現CFString不斷分配和增長。在我的代碼中創建NSString對象時,我使用了StringWithFormat方法,不像[[NSString alloc] init]。我怎樣才能阻止呢? 以下圖像是儀器輸出的屏幕截圖。在iOS應用程序中CFString(不可變)內存使用量不斷增加
請告訴我,如果缺少問題的必要信息。
是,如果你正在創建大量的使用便利構造臨時對象的使用自定義自動釋放池塊一個很好的做法。 由於使用便利構造函數創建的對象是自動釋放的,因此它們可能不會立即釋放。這是內存使用量激增的原因。
從Apple:
許多程序創建的自動釋放臨時對象。這些 對象將添加到程序的內存佔用空間直到 塊的末尾。在許多情況下,允許臨時對象累積 ,直到當前事件循環迭代結束時,不會導致 過多的開銷;但是,在某些情況下,您可能會創建大量的臨時對象,這些對象大大增加了內存的佔用空間,並且希望更快地處理這些對象。在後面這些情況下,您可以創建自己的自動釋放池塊。在塊的末尾 處,釋放臨時對象,這通常會導致它們的釋放,從而減少程序的內存佔用量 。
http://www.cocoanetics.com/2009/08/understanding-autoreleasing/
在我們的情況下,我發現NSString的(其中許多類NSPlaceholderString這是該類羣的一部分)的持續泄漏是由於NSZombieEnabled該計劃正對。
把它關掉消除了這個內存泄漏的來源。
您可以嘗試使用ARC ...無論如何,您都可以瀏覽Instruments中每個列出的對象(以及每個eventq的相關調用堆棧)的保留/釋放事件,以幫助您追蹤問題的根源。最後,嘗試使用Xcode中的Analyze構建樣式來查看靜態分配器是否指出任何潛在的保留/釋放問題。 – nielsbot
請顯示正在創建字符串的方法。 – trapper
@Ryo您的問題是否解決?你爲此嘗試了什麼?請告訴我。我也面臨同樣的問題。 –