2011-04-13 63 views
0

我有一個爲iPhone開發的目錄,這是我的第一個應用程序。正因爲如此,當我在目錄中有超過55張照片時,我遇到了內存泄漏和應用程序崩潰問題。 (我會解釋它何時崩潰)iPhone NSMutableArray與SQLite

我已經使用泄漏性能工具進行了測試,並且我成功修復了泄漏,但是我的應用仍然崩潰。

我的數據類有5個NSMutableArrays。 1有50個用於肖像的UIImage元素。第二個有25個UIImage元素用於景觀(目錄在1幅橫向圖像中使用2幅肖像)。其他有50個NSNumber用於縱向陣列到橫向陣列的參考圖像位置。另外兩個具有50個NSString元素,其中(1)名稱和(2)圖標圖像地址。一個Data類對象在AppDelegate中創建(應用程序的加載)。

我在肖像中開始目錄,通過傳遞肖像數組(通過UIImages)來製作視圖。當設備左轉時,我重新制作視圖(釋放舊視圖)傳遞橫向陣列。在xCode中,它的一切正常!在設備中,當我打開設備(重新制作視圖)時,有時(我注意到當我打開其他應用程序時)應用程序崩潰並顯示以下消息: 「程序接收信號:」0「 數據格式化程序暫時不可用」

我知道這個消息是指內存泄漏問題,所以我的問題是:

使用SQLite來存儲我的數據(實際上NSMutableArrays)我會獲得內存性能?我是用於iPhone的SQLite新手。有沒有其他解決方案來存儲我的數據?

謝謝大家,夥計們!

回答

0

此問題少於NSMutableArray s與SQLite以及更多關於內存使用情況的內容。一個UIImage通常會消耗大量的內存,並且在不需要時通常在不可見時應該被釋放。您的應用程序可能有0個泄漏,但仍會崩潰。您需要註冊UIApplicationDidReceiveMemoryWarningNotification通知並採取相應措施。 UIViewController s已經回覆- (void)didReceiveMemoryWarning,您可以覆蓋。現在,將這些圖像存儲在磁盤上,以便在需要釋放內存時使用SQLite或我推薦的內容,只需創建一個緩存文件夾即可。

+0

謝謝!這個答案使我獲得時間,不會改變我的存儲方法。唯一的問題是我在Objective-C中是相對新手,我不知道如何管理內存。我參考了Apple的教程,但從不改變。我有我的數組與UIImages在委託啓動方法中創建(與[UIImage alloc])。當我顯示這些UIImages時,我使用[myUIImage release];和應用程序崩潰的參考文獻不全。是否有任何其他教程介紹如何在iPhone中使用不是來自Apple的內存管理? – mausalamon 2011-04-15 12:54:22

0

我喜歡SQLite作爲解決方案。提供預填充數據庫非常容易,除此之外,您只需將應用程序掛接到可添加/刪除/更新記錄的某些方法即可。

你的問題不會用SQLite解決 - 問題在於內存管理。弄錯了,這與存儲數據的位置無關。

將2個問題分開 - 顯示vs存儲。讓顯示器正常工作,然後擔心存儲數據的位置。

+0

謝謝!我的答案在上面! – mausalamon 2011-04-15 12:59:13