iOS5上的UIImagePickerController内存泄漏

时间:2012-05-23 10:38:05

标签: objective-c xcode ios5 uiimagepickercontroller

我在我的应用程序中使用UIImagePickerController在iOS5& XCode4.2,内存泄漏,我不知道为什么我会得到这个泄漏你能不能给我答案。

here i am attaching my screen shot:

和我的代码:

-(void)createImagePicker 
{
_picker = [[UIImagePickerController alloc] init];
_picker.sourceType = UIImagePickerControllerSourceTypeCamera;

_picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;

_picker.allowsEditing = YES;
_picker.showsCameraControls = NO;


_picker.cameraDevice = UIImagePickerControllerCameraDeviceRear; 

_picker.delegate = self;
_picker.wantsFullScreenLayout = YES;

}

和viewWillApper方法:

    -(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeCameraButton:) name:@"ShowMainView" object:nil];
    [self createImagePicker];
    [m_cameraOverlayView setBackgroundColor:[UIColor clearColor]];
    [self presentModalViewController:_picker animated:NO];
    _picker.cameraOverlayView = m_cameraOverlayView;

    [cameraImgView setHidden:YES];
    [filterView setHidden:YES];
    m_cameraOverlayView.hidden = NO;
    cameraSelectedButton.hidden = NO;
    cancelButton.hidden = YES;
    selectButton.hidden = YES;

    for (id Object in [scrollview subviews])
    {
        if([Object isKindOfClass:[UIButton class]])
        {
            [Object removeFromSuperview];
        }
    }

    [m_toolbarImage setFrame:CGRectMake(0, 427, 320, 55)];
    [cameraSelectedButton setFrame:CGRectMake(128, 432, 86, 44)];

    [m_cancelButton setFrame:CGRectMake(10, 434, 82, 40)];
    [m_cancelButton setTitle:@"Close" forState:UIControlStateNormal];
    [m_cancelButton setBackgroundImage:[UIImage imageNamed:@"menu-bar-button.png"] forState:UIControlStateNormal];
    [m_cancelButton setTitleColor:[UIColor colorWithRed:110/256.0 green:52/256.0 blue:28/256.0 alpha:1.0] forState:UIControlStateNormal];


    [cancelButton setFrame:CGRectMake(120, 434, 35, 35)];
    [selectButton setFrame:CGRectMake(184, 434, 35, 35)];

    }

5 个答案:

答案 0 :(得分:4)

这似乎是iOS 5中UIImagePickerController的一个问题,无论是否使用ARC。

我有一个使用xcode 3.2.5为iOS 4开发的应用程序,当从图书馆中拍摄或选择照片时,仪器显示没有泄漏(在运行iOS 4.1的设备上测试)。在运行iOS 5.1的设备上测试的相同代码如上所述泄漏。

我知道这不是一个答案,但问题似乎比原来的问题更广泛。

答案 1 :(得分:3)

只是看到连苹果链接here的源代码泄露了我们遇到的同样问题......

答案 2 :(得分:2)

您应该调用[_picker release];放弃_picker内存的所有权,如Apple内存管理文档中所述。

答案 3 :(得分:1)

我读了许多关于这个问题的其他帖子。有人说这是Apple的问题,这就是为什么Zillian建议PhotoPicker示例也泄漏的原因。解决方法是只创建一个UIImagePickerController实例,可能是一个单例,并且永远不会释放它(或者让ARC为你发布它)。通过这种方式,您将始终使用相同的实例,并且可能会泄漏更少的时间。

答案 4 :(得分:0)

您是否在模拟器上运行该应用程序?如果是这样,这是一个历史悠久的问题(或者可能会回来):

  

泄漏主要是(但不是完全)在模拟器上,而不是   出现在设备上。

http://blog.airsource.co.uk/index.php/2008/11/12/memory-usage-in-uiimagepickercontroller/