1

您好我基本上有兩個問題弧內存泄漏和UIImage的名爲IOS

1)是否還有需要處理的內存泄漏iOS6上的Xcode 4.2 ARC環境中工作時,我才知道,電弧只撥打電話,在結束範圍。

2)聲明

self.profileImageView.image = [UIImage imageNamed:@"createProfile_addPhoto.png"];

其放置在圖像存儲器是用於屏幕重處理。我在很多地方閱讀過它,但沒有找到任何替代代碼來替代它。是否有更好的解決方案。

只是我需要處理的內存問題。

回答

2

我不知道,但如果我深知你的問題:
1-ARC也管理所有內存Objective-C的對象,並在iOS6的也GCD隊列
2-的所使用的高速緩存的圖像在存儲器中用於進一步的調用方法。所以如果你打電話給這個圖像很多次都是值得的(除非圖像真的很大)。

如果您需要創建一個更小的示波器,您可以將代碼嵌入到@autorelease塊中,這在處理週期時非常有用,但如果您使用-imageNamed:,我會告訴它將緩存圖像。更好地使用-imageWithContentsOfFile:
泄漏ARC都幾乎是不可能的,他們發生,如果你正在處理的Core Foundation不透明類型,不會自動ARC管理。使用ARC會發生什麼情況是放棄內存或保留週期,從來沒有聽說過使用它的泄漏。
希望這有助於 安德烈

2

1)是,對於某些情況下(即強參考週期)

2)[UIImage imageWithContentsOfFile:]可以是你的替代品。 imageNamed:實現了一個緩存系統。但是,當記憶變得緊張時,它會自行清除。

4

代替imageNamed使用imageWithContentsOfFile:

NSString *imagePath = [[NSBundle mainBundle]pathForResource:@"createProfile_addPhoto" ofType:@"png"]; 

self.profileImageView.image = [UIImage imageWithContentsOfFile:imagePath]; 
2

問題1):
另一種可能性與ARC內存泄漏是使用一個單獨的線程沒有建立一個自動釋放池。蘋果文檔https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html
「你必須儘快創建自己的自動釋放池塊作爲線程開始執行;否則,你的申請將泄漏物」
如果沒有自動釋放池設置,甚至調用一個簡單的getter方法會造成內存泄漏,如果它返回一個自動釋放的對象。