2013-01-07 74 views
3

我有多個視圖控制器設置在每個視圖中有一個UIDatePicker。我開始使用Leaks工具進行測試,並且日期選擇器沒有泄漏。接下來,我開始使用分配工具進行測試,這是我發現所有問題的地方。每個每個日期選取器初始化在viewDidLoad中我設定的日期選擇器模式是這樣的:UIDatePicker UISectionRowData巨大的內存分配

datePicker.datePickerMode = UIDatePickerModeDate; 

顯示包含日期選取器視圖控制器有「的malloc 392 KB」,這最終導致的多重分配每次應用程序崩潰。當在分配工具中深入挖掘時,它指出負責的調用者是[UISectionRowData:RefreshWithSection ....]。我不知道如何解決這個問題並修復它。任何幫助都會很棒。附件是分配工具的一些截圖。

enter image description here enter image description here enter image description here

+0

最近遇到過這個問題。有沒有解決這個問題的另一個解決方案,而不是設置日期選擇器在viewWillDisappear中爲零? – ShengHuaWu

+0

有同樣的問題。在iOS 6.1上測試。內存最終被釋放,但內存秒殺有時足以在較舊的設備上殺死我的應用程序,這些設備的內存較少。 – Hrissan

回答

1

我覺得行

datePicker.datePickerMode = UIDatePickerModeDate; 

可能是誤導性的,它可能引起泄漏的

date.inputView = datePicker; 

我的猜測是日期有下一行合成的inputView變量保留了該對象。鑑於你正在做的alloc和init,並在此行中沒有自動釋放...

datePicker = [[UIDatePicker alloc]init] 

,我期望這是泄漏,但很難說,你以後可以調用釋放,但如果沒有這將是我的猜測。

+0

我會研究這個。謝謝! – Sean

+0

在viewWillDisapear我只是設置date.inputView =零,並釋放選擇器 – Sean

1

嘗試通過編碼使您的UIDatePicker。並在需要時初始化它,不要初始化它在viewDidLoadviewWillAppear說你有一個按鈕,當它被點擊時,你初始化UIDatePicker。當用戶完成選擇日期時,請將其從超級視圖和datePicker=nil;中刪除。這樣你就可以節省內存,只要UIDatePicker可見,它就會被使用。