我正在使用UIImagePickerController类获得内存泄漏。
以下是我使用它的方式:
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:picker animated:YES];
[picker release];
要删除选择器,我在[picker dismissModalViewControllerAnimated:YES];
和didFinishPickingImage
中拨打imagePickerControllerDidCancel
。
-
仪器显示该指令导致大约160字节泄漏:
+[UIImagePickerController _loadPhotoLibraryIfNecessary]
显然这个问题已经并且正在扰乱许多人和解决方案 避免这个问题就是建立一个 单身课专门用于采摘 来自图书馆或使用捕获的图像 设备的内置摄像头。
有人想要添加一些东西吗?
答案 0 :(得分:2)
作为one of the first articles关于使用单身人士的必要性的作者,其动机是防止7/8图像捕获时的崩溃,而不是因为对泄漏的任何特别担心。 160字节很烦人,但不是主要问题,因此不值得担心(因为开发人员无法修复)。
答案 1 :(得分:0)
您是否尝试删除代理行?在委派给AVAudioPlayer
时,self
遇到了类似的问题。 (尽管访问者在两种情况下都说assign
。)如果泄密随着委托而消失,您可以委托给另一个对象。
答案 2 :(得分:0)
如果您使用GeneralBlock
看到内存泄漏多个SegmentMachO
和UIImagePickerController
,
尝试将CoreLocation框架和MapKit
框架添加到您的项目中。我没有看到仪器工具泄漏检查中的内存泄漏。我不知道UIImagePickerController
与这些框架的关系。我不确定它是不是很好的解决方案。 “在不使用或不必要的情况下添加框架”。
使用UIImagePickerController
我也有内存泄漏。即使在从developer.apple.com下载的示例代码“PhotoLocation”和“iPhoneCoreDataRecipes”中也会发生内存泄漏。我还通过将这些框架添加到下载的示例代码中进行检查。没有内存泄漏了。
答案 3 :(得分:0)
我在仪器中发现了内存分配泄漏。 我所做的只是打开和关闭图像选择器(打开/取消)并使用Apple代码,我的代码和其他人的代码。
每次都显示出分配上升和上升,好像选择器没有被释放。 如果你试图释放它,它会崩溃(过度释放)。
然后我发现了一个非常有用的网页,基本上说明了:
“在设备上进行测试时不会发生这种情况”
所以我从模拟器切换并在设备上运行测试。 Lo&看,没有分配增加,而且表现正常。
然而,这完全是邪恶的,现在我们不能信任模拟器来做可靠的工作。无论这是否与您的具体问题相关,我还会介绍其他任何要添加的内容,而我要添加的内容是不要在模拟器上测试内存!
答案 4 :(得分:0)
原因可能是您忘记发布图片。因为每次你写
UIImageView.image = image_a;
然后,image_a
将保留一次。
在UIImageView.image = nil
之前,image_a
最终可以释放。
我以这种方式解决了我的问题。