0

嘿,我有一個問題,我想要一些建議。在手機上泄漏,但不在仿真器上?

我工作的多數民衆贊成由以下幾個主要部分的文檔查看器:

  1. 拉鍊庫,解包文件容器(minizip)
  2. XML庫,解析文檔(libxml2的)
  3. 在屏幕上呈現文檔的UI代碼

沒有太複雜或花哨的東西。

在模擬器上,一切都很精美;觀衆按預期執行。我已經通過儀器運行,沒有泄漏。 ObjectAlloc報告在查看器的整個生命週期內分配了大約5.5兆字節(這反覆打開我的測試文檔)。

不幸的是在設備上(iPhone 3G,iOS 3.1.2)的事情並不那麼清楚。相當頻繁地,重複打開測試文件會導致內存不足錯誤,並且文件將無法打開。初始文件打開始終有效。儘管模擬器測試突出顯示沒有泄漏,整體內存佔用也不大,但我不得不斷言iPhone上確實存在泄漏(因爲爲什麼重複打開會導致內存不足錯誤)。

我試圖在設備上運行儀器,但應用程序在運行中途停下來(?!),所以我實際上沒有成功運行泄漏。

我相信有一個重要的泄漏只會出現在設備上。所以,我剩下兩個選項(沒有特定順序):

  • 重構我的代碼,避免使用zip庫。這將消除潛在的泄漏源。耗時且不確定。
  • 重新格式化並重新安裝我的手機上的所有東西(也許有什麼會導致問題)。非常像上面那樣,耗費時間,並且會丟失我的手機數據。也許它會讓我跑漏。

正如你所看到的,我到達這裏。有什麼明顯的我失蹤了?

在此先感謝你們。

回答

1

也許,你應該嘗試在你的設備上運行沒有泄漏,但分配儀器,並用它(手動)搜索泄漏?

+(也許這聽起來很愚蠢)從設備中刪除應用程序,並重復清潔生成運行與泄漏(爲什麼不?)。


關於手動泄漏搜索。

只需啓動分配工具,並在使用您的應用程序時,多次執行所有操作(例如 - 按兩次或多次按鈕;導​​航到某個面板並返回幾次 - 依此類推)。記憶應該只顯着增加一次,或者在動作開始時增加,在動作結束時減少(當然,可能存在一些分歧,但應該用少量記憶來反映)。你會在圖上看到它。

還可以堆積(在儀器的左側面板中,選擇分配儀器時會出現一個按鈕) - 它們將幫助您檢測被認爲已被銷燬的「仍然活着」的物體(會有很多物體,但第一步也是最簡單的一步就是檢查你自己的類的對象)。

+0

你的意思是「ObjectAlloc」?你是什​​麼意思通過手動搜索它們?感謝您的建議! – EightyEight 2010-08-13 04:28:00

+0

嗯,我想是的。但是在我的樂器(在樂器選擇菜單中)和我的XCode(主菜單:運行 - >與演奏工具一起運行)中,它被稱爲「分配」。 而關於手動搜索 - 請參閱我的答案(我編輯它以添加詳細信息)。 – kpower 2010-09-01 07:02:15

相關問題