iPhone 中 UIImagePickerController 的内存泄漏问题

Posted

技术标签:

【中文标题】iPhone 中 UIImagePickerController 的内存泄漏问题【英文标题】:Memory Leak Problems with UIImagePickerController in iPhone 【发布时间】:2009-07-27 18:07:49 【问题描述】:

我正在为 UIImagePicker 使用以下代码,

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];  
imagePicker.delegate = self;

[self presentModalViewController:imagePicker animated:YES];
[imagePicker release];

当我运行仪器时,我在代码的第一行看到内存泄漏。虽然我正在发布它,但它仍然显示内存泄漏,有没有人知道我哪里出错了。

我从 iPhone 开发人员示例代码帮助中安装了 iPhoneCoreDataRecipes 应用程序,但它遇到了同样的问题。

【问题讨论】:

具体泄露了什么?是 UIImagePickerController 实例吗? leak 与这段代码无关,这段代码没问题,一定是在别的地方…… 我的意思是无论如何我都能看到 泄漏与第一行代码有关。当您进入详细扩展视图时,它会将您带到第一行代码。 【参考方案1】:

我自己也看到了。我认为这是 Apple 代码中的一个问题,我通过只保留 UIImagePickerController 的单个实例并根据需要重新使用它来“解决”它。否则,我的应用程序将在 UIImagePickerController 实例化 20 次左右后耗尽内存。

【讨论】:

【参考方案2】:

我认为这是苹果代码中的一个错误。当您显示图像选择器控制器时,即使您明确释放了选择器,它们似乎也没有正确释放一些小东西。

【讨论】:

【参考方案3】:

我相信 Apple 建议将 UIImagePicker 用作单例,这意味着在整个程序运行时您只有一个控制器实例。如果您考虑一下,您只需要一个实例,因为可以使用同一个控制器多次拾取或拍照。 UIImagePickerController 似乎是内存密集型的,因此初始化多个实例可能会导致内存警告,如果您没有考虑到这一点,可能会释放其他视图并导致问题。

【讨论】:

以上是关于iPhone 中 UIImagePickerController 的内存泄漏问题的主要内容,如果未能解决你的问题,请参考以下文章

使用照片框架删除相机胶卷资产

从uiimagepicker捕获图像后如何自定义图像

将图像选择器相机转移到一个视图到另一个视图时的内存警告

在 iphone 5 和 iphone 6 中动态设置字体大小

iPhone 相机应用程序在 iPhone 中运行良好,但在 iPod 中崩溃

iphone:在我的 iphone 应用程序中添加打印功能