2012-03-05 9 views
1

このエラーは「[Aタイプリリース]:メッセージが最後のコード行で「割り当て解除されたインスタンスに送信されました」CGImageRelease(imageToSave) 。なぜそれを修正するために私が必要とするものを説明してください。私はARCを使用していますが、CGオブジェクトには当てはまりません。私は彼らが動作することをテストした後、提案された答えでコードを更新しました。CGImageRelease:[Not A Type release]:メッセージが割り当て解除されたインスタンスに送信されました

CGImageRef imageToSave; 
UIImage *uiImageToSave = [[UIImage alloc] init]; 
if (sender == nil) { 
    imageToSave = [originalImage CGImage]; 
} else { 
    uiImageToSave = [self addTitleBlock:annotatedImage]; 
    imageToSave = [uiImageToSave CGImage]; 
} 
[library writeImageToSavedPhotosAlbum:imageToSave metadata:imageMetadata completionBlock:^(NSURL *assetURL,NSError *error){ 
    [saveAlertView dismissWithClickedButtonIndex:0 animated:YES]; 
    [activityIndicator stopAnimating]; 
    [activityIndicator removeFromSuperview]; 
    if(error == nil) { 
     if (sender != nil) { 
      [self setToolbarItems:viewingToolbarItems animated:YES]; 
      [UIView beginAnimations:@"savePhoto" context:NULL]; 
      [UIView setAnimationTransition:PHOTO_SAVE forView:pictureView cache:YES]; 
      [UIView setAnimationDuration:0.5f]; 
      [UIView setAnimationDelay:0.0f]; 
      [UIView setAnimationPosition:CGPointMake(45, 430)]; 
      [splashScreen setHidden:NO]; 
      [imageView setHidden:YES]; 
      [sampleImageView setHidden:YES]; 
      [colorImageView setHidden:YES]; 
      [UIView commitAnimations]; 
     } else { 
      [saveButton setEnabled:YES]; 
      [cancelButton setEnabled:YES]; 
     } 
    } else { 
      if (sender != nil) { 
      saveAlertView=[[UIAlertView alloc] initWithTitle:nil message:@"Image Save Failed!" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles:nil]; 
     } else { 
      saveAlertView=[[UIAlertView alloc] initWithTitle:nil message:@"Original Image Save Failed!" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles:nil]; 
     } 
     [saveAlertView show]; 
     [saveButton setEnabled:YES]; 
     [cancelButton setEnabled:YES]; 
    } 
    // CGImageRelease(imageToSave); 
}]; 
+2

CGImage * Create *でイメージを作成していないか、CGImageRetainを使用しているため、リリースする必要はありません。 CGImageRelease命令を削除するだけです。 CGImageをリリースする時期については、https://developer.apple.com/library/ios/#documentation/graphicsimaging/reference/CGImage/Reference/reference.html – AmineG

答えて

3

someone0があなたを語っているものよりもさらに悪い:

を、私はあなたが他のをブロックして、あなたのuiImageToSaveを定義したとして、あなたはimageToSaveで作成した参照が外有効ではないと言うでしょうelseブロック - あなたのコード内でのimageToSaveの使用は、メモリがまだ上書きされていない限り、偶然に働いています。

そして、[UIImage CGImage]コールだけあなたに画像データを参照を与え、それはコピーを作成するか、それを保持していないと述べたように - あなたはそれを自分を解放しないことがあり、それが自動的に解除されますUIImageが存在しなくなったとき - あなたが参照した後のあなたの場合はただ1行です。

UPDATE:

元の投稿のコードを調整する - uiImageToSaveは今、誰もが今、本当に:-)もう元の投稿をフィットされていない私のコメントについて疑問に思うだけであれば右の場所(で定義されています。

+0

をご覧ください。意味があり、変更が有効です。私はコードを更新しました。ありがとう、また@ someone0に感謝します。 –

関連する問題