2010-08-19 223 views
1

我的問題是我的應用程序中有內存泄漏,即使我正在做的一切正確。我分配一個本地uipickerviw,將其分配給類成員(pickerview),然後我dealloc本地uipickerview。我仍然有內存泄漏。我不明白你。有人plz幫助我。uipickerview導致內存泄漏

UIImagePickerController *the_pImagePicker=[[UIImagePickerController alloc] init]; 
//memory leak is displayed on this line. 
self.m_pImagePicker = the_pImagePicker; 
self.m_pImagePicker.delegate = self;  
[the_pImagePicker release]; 
+2

也許你應該告訴我們爲什麼你認爲這個泄漏。和一些上下文的代碼... self.m_pImagePicker可能會保留它,你釋放它的地方? – Eiko 2010-08-19 13:17:25

+0

正如Eiko所說,如果m_pImagePicker的@property擁有(保留),如果您沒有將self.m_pImagePicker設置爲零,您將泄漏該對象。 – Kalle 2010-08-19 13:31:44

+0

拾取器完成後你在做什麼?你能告訴我們那裏的圖像選擇器清理代碼嗎? – 2010-08-19 20:11:47

回答

2

在首次創建/分配選取器後不應該有任何泄漏。

第一次:

的保留the_pImagePicker的計數爲1。 變得2因爲m_pImagePicker是「保留」的屬性的第二行之後的第一行之後。 最後一行之後,它再次下降到1。

但是,如果m_pImagePicker被定義爲「保留」的屬性,如果你再次調用這段代碼和之前不釋放self.m_pImagePicker,你會泄漏內存:

二時間:

在第二行中,您重新指定self.m_pImagePicker指針,所以self.m_pImagePicker在「第一次」後引用的對象將被保留計數器轉儲爲1 == leak。

我最初將self.m_pImagePicker設置爲零,並且在執行代碼之前會檢查它是否仍爲零。如果不是,我會釋放它,將它設置爲零(僅僅爲了與「無」邏輯一致),然後執行新的賦值。

+0

你確定dealloc會被調用嗎?看到整個班級結構會很有用。誰是選取者的所有者?誰是該擁有者的所有者?該結構中節點的分配/解除分配的邏輯是什麼? – spbfox 2010-08-20 14:07:47