2010-08-19 157 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