2011-06-06 60 views
2

我对此有点困惑,因为我已经看到太多不同的变体,并且不确定哪一个是正确的方式。目前,我有: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,但不会是合乎逻辑的,只在第2个方法,当我关闭它释放?

回答

6

不,因为它通过presentModelViewController以模态方式呈现时保留。这是您在展示新视图控制器时会发现的常见模式,无论是否使用模态,自定义视图控制器。这很好:

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

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

    [self presentModalViewController:picker animated:YES]; 

    [picker release]; 
} 
+0

很感谢。这意味着我不需要发布在didFinishPickingMediaWithInfo中:) – 2011-06-06 12:24:04