1

我的 UIImagePickerController 类出现内存泄漏。

这是我使用它的方式:

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentModalViewController:picker animated:YES];
    [picker release];

要删除我调用的选择[picker dismissModalViewControllerAnimated:YES];didFinishPickingImageimagePickerControllerDidCancel.

--

由于此指令,仪器显示大约 160 字节泄漏:

+[UIImagePickerController _loadPhotoLibraryIfNecessary]

显然这个问题已经困扰着很多人,避免这个问题的解决方案是构建一个单例类,专门用于从库中挑选图像或使用设备的内置摄像头进行捕获。

有人想添加一些东西吗?

4

5 回答 5

2

作为第一篇关于使用单例的必要性的文章的作者,其动机是防止在第 7/8 次图像捕获时崩溃,而不是因为任何特别担心泄漏。160 字节很烦人,但不是主要问题,因此不值得担心(因为开发人员无法修复它)。

于 2009-01-28T12:36:35.757 回答
0

您是否尝试过删除代理线路?我AVAudioPlayer在委派给self. (即使访问者assign在这两种情况下都说。)如果泄漏随着委托而消失,您可以委托给不同的对象。

于 2009-01-28T12:59:54.007 回答
0

如果您看到多个内存泄漏GeneralBlockSegmentMachO使用UIImagePickerController,

尝试将 CoreLocation 框架和MapKit框架添加到您的项目中。我在仪器工具泄漏检查中不再看到内存泄漏。我不知道UIImagePickerController与这些框架有什么关系。我不确定这是否是好的解决方案。“在不使用或不需要的情况下添加框架”。

我也有使用UIImagePickerController. 即使在从developer.apple.com下载的示例代码“PhotoLocation”和“iPhoneCoreDataRecipes”中也会发生内存泄漏。我还通过将这些框架添加到那些下载的示例代码来进行检查。不再有内存泄漏。

于 2010-05-10T03:24:02.863 回答
0

我在 Instruments 中发现了内存分配泄漏。我所做的只是打开和关闭图像选择器(打开/取消)并使用 Apple 代码、我的代码和其他人的代码。

每次都显示分配不断增加,就好像选择器没有被释放一样。如果你试图释放它,它会崩溃(过度释放)。

然后我发现了一个非常有用的网页,它基本上说:

“在设备上测试时不会发生这种情况”

所以我从模拟器切换并在设备上运行测试。瞧,没有分配增加,而且表现正常。

然而,这完全是邪恶的,现在我们不能信任模拟器来完成可靠的工作。无论这是否与您的特定问题有关,我都带您添加任何其他内容,而我要添加的内容是不要在模拟器上测试内存!

于 2011-01-26T04:54:54.793 回答
0

原因可能是您忘记发布图像。因为每次你写

UIImageView.image = image_a;

然后,image_a将被保留一次。

直到你让UIImageView.image = nil,什么时候image_a才能最终释放。

我以这种方式解决了我的问题。

于 2011-08-30T05:04:23.530 回答