UIImagePickerController内存泄漏

Wat*_*son 8 iphone memory-leaks objective-c uiimagepickercontroller ios

UIImagePickerController在我的iPhone应用程序中使用时,我发现内存泄漏很大.我正在使用apple文档中的标准代码来实现控件:

    UIImagePickerController* imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.delegate = self;
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        switch (buttonIndex) {
            case 0:
                imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
                [self presentModalViewController:imagePickerController animated:YES];
                break;
            case 1:
                imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
                [self presentModalViewController:imagePickerController animated:YES];
                break;
            default:
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

并取消:

-(void) imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [[picker parentViewController] dismissModalViewControllerAnimated: YES];
    [picker release];
}
Run Code Online (Sandbox Code Playgroud)

didFinishPickingMediaWithInfo回调就像标准一样,虽然我甚至不需要选择任何导致泄漏的东西.

这是我在乐器中看到的,当我所做的只是打开UIImagePickerController,选择照片库,并反复按取消.正如您所看到的,内存不断增长,最终导致我的iPhone应用程序速度大幅下降.

在此输入图像描述

正如你所看到的那样,我打开了24次图像选择器,每次都是malloc'd 128kb,它从未发布过.基本上我总共6mb中的3mb永远不会被释放.

无论我做什么,这个记忆都会泄露.即使在离开当前控制器之后,仍然是相同的.我还将拾取器控件实现为具有相同结果的单例.

以下是我深入研究这两行时所看到的内容:

在此输入图像描述

这里的任何帮助将不胜感激!再说一次,我甚至不必选择图像.我只是出现控制器,然后按取消.

更新1

我下载并运行了苹果的使用示例,UIIMagePickerController我看到在运行仪器时(在模拟器和手机上)都发生了相同的泄漏.

http://developer.apple.com/library/ios/#samplecode/PhotoPicker/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40010196

所有你要做的就是点击照片库按钮并反复点击取消,你会看到内存不断增长.

有任何想法吗?

更新2

我只在查看照片库时才看到此问题.我可以选择拍照,一遍又一遍地打开和关闭那张照片,没有泄漏.

Åke*_*sen 5

这是SDK中的一个错误.向Apple提交报告.我有samme isue.它也记录在这里:http://www.cocoabuilder.com/archive/cocoa/285293-iphone-memory-leak-can-explain.html 这是一年多以前仍然没有修复.

  • 那么使用照片浏览器的每个人都会泄漏内存?这是一个非常重要的数额. (3认同)

Til*_*ill 0

尝试在释放之前将其设置UIImagePickerController.delegate为。nil

-(void) imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [[picker parentViewController] dismissModalViewControllerAnimated: YES];
    picker.delegate = nil;
    [picker release];
}
Run Code Online (Sandbox Code Playgroud)