2012-10-26 193 views
0

我正在用MapView和UIImagePicker創建一個應用程序。我在屏幕上顯示地圖,並在用戶移動時顯示其路線。用戶可以在兩者之間捕捉圖像。我有兩個屏幕爲..Iphone內存警告問題

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

當我去到屏幕1到屏幕2.我表現出ImagePicker和允許用戶捕捉圖像。當我回到屏幕1 I release所有對象,並使其nil。這項任務通常在viewDidUnload完成,但我得到的內存問題,所以我做了它,當我的視圖控制器彈出。所以我的所有對象都會在釋放它們之後立即得到釋放,並且一旦我完成它們就會立即釋放。

當我去我的登錄屏幕從地圖上我做的每一個我知道的東西,如:

  1. 從超級視圖
  2. 刪除視圖釋放所有allated對象或保留的對象(包括甚至NSString對象,以及)
  3. nil設置爲所有這些對象的值。

當我運行的分析應用程序,並沒有運行時泄漏繳費但即使在活動監視器我的應用程序的實際內存continuesly得到提高:(

10-12圖像捕捉得到我得到Received memory warning. Level=1我連存儲UIImage對象在內存中。我在文件目錄寫這僅存儲路徑字符串。

請幫助我,指導我還有什麼可以做,以解決這個問題。

UPDATE

雖然上後退按鈕釋放對象我使用:

- (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]; 
} 
+0

向我們展示一些代碼 – basvk

+0

@basvk我已經添加了我用來釋放內存的方法的代碼..其餘部分都是正常的alloc init和pusvc以及呈現vc等。 –

+0

爲什麼你現在還在使用ARC –

回答

0

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

另外我建議你仔細檢查一下,你沒有運行NSZombieEnabled(檢查它的方案),因爲它會導致內存警告。

+0

是的殭屍運行,特別是在較舊的硬件上,可能會導致內存警告,因爲沒有任何內容被刪除。 – ahwulf

3

ARC是支持4.3爲好,所以用它。

你的方法與專用的「releaseEverything」方法一路被打破 - 它顯示缺乏所有權跟蹤,最好是黑客。

viewDidUnload現在已被棄用,而不是由iOS 6系統調用(您應該構建它)。

不要打架子 - 做到「正確」的方式。

+0

我也知道這一點,但我不知道爲什麼蘋果在本文中提到了部署目標5.x http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/_index .html for ARC –

+0

iOS 4.3中唯一的限制是你不能使用'weak'限定符,因爲它需要一個運行時才能刪除被引用的對象,你可以使用_unsafe_unretained替代我最近做了一個過渡到ARC項目支持iOS 4.3,它可以很好地工作 – DarthMike

+0

@Eiko謝謝你的回覆..如何在4.3中使用arc?請問你能否提供一些鏈接.. –