2

我正在製作一個具有幾個視圖控制器與UIDatePicker控件的應用程序。UIDatePicker內存泄漏與ARC

有大量內存警告後,我已經做了很多調試的病因。使用儀器,我發現只要包含UIDatePicker的視圖控制器出現,內存使用量就會增加2-3mb。最終,這會導致記憶警告。儘管我可以在這裏做很多事情,並且自從重寫這些函數以來已經看到崩潰事件的急劇下降,但我仍然不滿意這種行爲並想要修復它。

的的UIDatePicker的是XIB文件的一部分。我試圖將它們從XIB中以編程方式添加它們。這並不能解決問題。我也嘗試過使用一個(線程安全的)單例,這將內存使用量限制爲只有一個實例(所以內存使用不會增加),但是我儘可能避免使用單例。使用單?

我看到在iOS 5和4.3此行爲,跨運行它。我使用ARC的所有設備,如標題所暗示的。

儀表不顯示任何內存泄漏。

這裏是從儀器的屏幕截圖。在使用中的每個加強是當出現包含一個日期選取一個VC。在該曲線圖的起始基線是內存使用情況的2.3MB。

http://i.stack.imgur.com/1S7ns.png

乾杯!

+0

'UIDatePicker'可能是一個紅鯡魚。你確定你沒有在視圖創建中做任何其他事情,導致內存增加?我無法在這裏重現您的問題。 – 2012-01-27 02:23:19

+0

作爲測試,我剛剛從XIB中刪除了UIDatePicker。問題消失了。它被用作UITextField的輸入視圖,因此在XIB中作爲與VC視圖相同級別的單獨視圖開始。 – gamblor87 2012-01-27 02:35:33

+1

好的,只是刪除日期選擇器可能不是一個好的測試,因爲委託方法不再被調用。嘗試評論任何你有任何**任何**與日期選擇器遠程相關,看看你是否仍然收到泄漏。另外,你的日期選擇模式是「UIDatePickerModeDateAndTime」嗎?該模式存在已知的泄漏。 – 2012-01-27 02:44:37

回答

4

你想在這裏使用的工具稱爲heapshot。它將幫助您縮小不正確保持的對象的類型。作爲@sudo筆記,這個問題可能在你的委託中,而不是日期選擇器本身。你可能不是在嚴格意義上的「泄漏」。你可能只是抱着你不想要的記憶(這看起來很像泄漏)。

你應該仔細看看是否有任何循環強引用。例如,你有沒有強烈參考其代表的對象?這通常會導致一個保留循環(這將永遠不會在ARC下發布)。 Heapshot可以幫助您找到這些對象。

+0

直到最近我才知道堆積分析。它實際上是一種救生工具。 – 2012-01-27 06:27:51

3

我似乎已經解決了我自己的問題。因爲這是一個inputView,並且我還有一個UIToolbar,它具有「完成」按鈕作爲inputAccessoryView。

所以現在我在viewWillAppear中編程創建這些。在viewWillDisappear中,我將UITextField的inputView和inputAccessoryView設置爲零,並將日期選擇器和日期選擇器工具欄設置爲零。

他們是在廈門國際銀行文件。這個似乎不再工作非常好 - 內存3MB尖峯起來,然後就背下來了第二的意見消失。現在應用程序一直運行在10MB以下的實時內存中 - 有時會達到15mb,但很少。

感謝您的幫助須藤室射頻和羅布 - heapshot分析幫助,試圖得到它的底部。