簡體   English   中英

iPhone內存警告問題

[英]Iphone Memory Warning issues

我正在使用MapView和UIImagePicker創建一個應用程序。 我正在屏幕上顯示地圖,並隨着用戶的前進顯示路線。 用戶可以在兩者之間捕獲圖像。 我有兩個屏幕。

  1. 顯示地圖
  2. 捕獲圖像(從屏幕1推送)

當我轉到屏幕1到屏幕2時,我顯示一個ImagePicker並允許用戶捕獲圖像。 當我跳回到屏幕1時,我release所有對象並將其設置為nil 該任務通常在viewDidUnload完成,但是我遇到了內存問題,因此當我的視圖控制器彈出時就完成了。 因此,當我完成所有對象的工作后,我的所有對象都會被釋放,並且沒有任何作用。

當我從地圖轉到登錄屏幕時,我正在做的事情我都知道:

  1. 從超級視圖中刪除視圖
  2. 釋放所有分配的對象或保留的對象(甚至包括NSString對象)
  3. 為所有這些對象設置nil值。

當我通過性能分析運行該應用程序時,沒有運行時泄漏可用,但是即使在Activity Monitor中,我的應用程序的真實內存仍會不斷增加:(

捕獲10-12張圖像后,我將Received memory warning. Level=1 Received memory warning. Level=1我什至沒有在內存中存儲UIImage對象。 我在文檔目錄中寫這個,只存儲字符串路徑。

請幫助我,並指導我解決該問題的其他方法。

更新

當釋放后退按鈕上的對象時,我正在使用:

- (void)releaseObjects {

    [mapViewNewTour setDelegate:nil];
    [mapViewNewTour removeFromSuperView];
    [mapViewNewTour release];
    mapViewNewTour = nil;
    [lblNavTitle release];
    lblNavTitle = nil;
    [btnEdit release];
    btnEdit = nil;
    [txtTourName release];
    txtTourName = nil;
    [vwTourName release];
    vwTourName = nil;
    [mutDictOfflineSharing release];
    mutDictOfflineSharing = nil;
    [mutArrImage release];
    mutArrImage = nil;

    [_routeLine release];
    _routeLine = nil;
    [_routeLineView release];
    _routeLineView = nil;
    [aLazyLoader release];
}

ARC在4.3上也受支持,因此請使用它。

您使用專用的“ releaseEverything”方法的方法被徹底破壞了-它表明缺乏所有權跟蹤,並且充其量是一種黑客。

無論如何, viewDidUnload現在已被棄用,iOS 6中的系統不會調用它(您應針對此構建)。

不要與框架作斗爭-以“正確”的方式來做。

我建議您運行儀器並查看使用內存的位置。 有用於內存使用情況分析的特定工具。 您將需要的工具是“活動監視器”和“ VM跟蹤器”。

另外,我建議您再次檢查您是否未在使用NSZombieEnabled運行(請在方案中檢查它),因為它將導致內存警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM