1

我的问题是我的应用程序中存在内存泄漏,即使我做的一切都是正确的。我正在alloc使用本地 uipickerviw,将其分配给类成员(pickerview),然后我解除本地 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];
4

1 回答 1

2

在第一次创建/分配选择器后不应该有任何泄漏。

第一次:

在第一行之后,the_pImagePicker 的保留计数为 1。在第二行之后,它变为 2,因为 m_pImagePicker 是“保留”属性。在最后一行之后,它再次下降到 1。

但是,如果 m_pImagePicker 被定义为“保留”属性,并且如果您再次调用这段代码并且在此之前没有释放 self.m_pImagePicker,您将泄漏内存:

第二次:

在第二行,您重新分配 self.m_pImagePicker 指针,因此“第一次”之后 self.m_pImagePicker 引用的对象将被转储,保留计数器仍等于 1 == 泄漏。

我最初会将 self.m_pImagePicker 设置为 nil,然后在执行代码之前检查它是否仍然为 nil。如果不是,我会释放它,将其设置为 nil(只是为了与“nil”逻辑一致),然后执行新的分配。

于 2010-08-19T19:21:03.687 回答