2012-05-18 44 views
2

我在我的通用iOS應用程序中遇到了這個奇怪的問題。在分析應用程序時,我沒有在樂器工具中看到任何有效的內存泄漏。在每次頁面更改時,分配的大小仍然會增加50-100 kb。泄漏工具只會顯示一些泄漏與負責調用者mem_alloc。即使沒有有效的內存泄漏,我的應用程序仍會收到內存警告

經過一段時間的使用後,應用程序開始接收內存警告,並在應用程序和應用程序崩潰了一段時間。有趣的是,此時的內存總量分配在6到12 MB之間。當我在調試模式下回溯時,App不會顯示任何堆棧信息。

我完全不知道爲什麼會發生這種事故。任何幫助將不勝感激。


附加我的樂器的一些屏幕截圖。 enter image description here enter image description here enter image description here

+0

你有沒有用過靜態內存分析器? – rishi

+0

我對靜態內存分析器一無所知。你介意給我解釋一下嗎? –

回答

1

雖然我問這個問題真的很長,但沒有得到任何正確答案。在回顧我的問題時,我認爲解決這個問題對其他早期起步者會有幫助。所以在這裏,我張貼我的解決方案,工作:

在這種情況下真正的罪魁禍首是我在應用程序中使用圖像的方式。我只是通過調用[UIImage ImageNamed:]來使用它。實際上,這種方法會泄漏圖像大小的內存。

這個問題的解決是通過調用ImageWithData使用圖像(見下面的代碼):

NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension]; 
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation]; 
[UIImage imageWithData:imageData]; 

希望這可以幫助別人。

+0

如果您使用的是ARC,還不知道原始帖子。如果您使用手動引用計數,您如何確定這不是您處理UIImage文件?我很難相信蘋果框架類方法已經以這種方式泄露了2年以上的內存,並且沒有被注意到。 – mckeejm

+0

@mckeejm這個問題在2012年被問及,當時我正在使用非ARC代碼。我同意你的觀點,即Apple框架類方法不應該像這樣泄漏內存,我可能會錯誤地說它正在泄漏內存。本質上imageNamed函數緩存圖像數據,最終消耗內存。此外,如果您搜索比較imageNamed函數和imageWithData,人們會建議您使用imageWithData。 –

3

您需要在您的應用程序下面的檢查內存分配 -

  1. 使用Instruments檢查AllocationLeaks

  2. 使用靜態內存分析器檢查靜態內存泄漏。 要使用此既可以使用「CMD + SHIFT + B」或去「的Xcode - >產品 - >分析」

而且你需要確保你的視圖控制器的正常釋放。

+0

感謝您的快速回答。我已經完成了你提到的兩件事,並且在此之後才提出這個問題。 –

+0

你可以顯示你儀器的一些屏幕截圖,內存使用情況正在上升。 – rishi

+0

給我一些時間,我會在這裏發佈。 –