正确发布UIImagePickerController

时间:2011-06-06 11:03:14

标签: ios4 uiimageview uiimage uiimagepickercontroller

我对此有点困惑,因为我已经看到了太多不同的变体,并且不确定哪一种是正确的方式。目前我有:

- (IBAction)pickImageFromLibrary:(id)sender
{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];

    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    [self presentModalViewController:picker animated:YES];

    //  [picker release];
}

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{   
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0.0f, 10.0f, 320.0f, 264.0f)];

    self.studyView = imageView;

    [imageView release];

    [self.tableView setTableHeaderView:studyView];

    self.fitImage = [ImageHelper image:image fitInView:studyView];

    if (picker.sourceType == UIImagePickerControllerSourceTypeCamera)
    {
        UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
    }

    studyView.image = self.fitImage;

    [self dismissModalViewControllerAnimated:YES];

    [picker release];
 }

我在第一种方法中分配UIImagePickerController但是当我解雇它时,只在第二种方法中释放它是不合逻辑的?

1 个答案:

答案 0 :(得分:6)

不,因为它是通过presentModelViewController以模态方式呈现的。这是您在呈现新视图控制器时可以找到的常见模式,无论是模态控制器还是自定义视图控制器。这很好:

- (IBAction)pickImageFromLibrary:(id)sender
{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];

    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    [self presentModalViewController:picker animated:YES];

    [picker release];
}