2017-02-03 5 views
1

私はメモリリークの問題があります。私はこのコードが正しく動作しないと思いますか?Objective-Cメモリリーク(VideoTooplbox、MediaToolBox、AVFoundation)

ユーズケース:
フルスクリーンイメージ(ポートレート)を取得し、UIImageviewに保存します。

問題:撮影した画像と保存された画像が同じではありません。保存した後、UIImageviewで画像の回転が横長になりました。

ソリューション:変化画像の向き(参照removeRotationForImage)

新しい問題:時々私は「使用絵」ボタン上の画像を押しを取る場合、ビューのフリーズ。そしてメモリリーク。

どうすればこの問題を解決できますか?

enter image description here

{  

    -(IBAction)takePhoto:(id)sender{ 

    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.allowsEditing = NO; 
    picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    [self presentViewController:picker animated:YES completion:NULL]; 
} 

{ 

    -(UIImage *)removeRotationForImage:(UIImage*)image { 

    if (image.imageOrientation == UIImageOrientationUp) return image; 

    UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); 
    [image drawInRect:(CGRect){0, 0, image.size}]; 
    UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return normalizedImage; 

} 

{ 

    -(void)imagePickerController:(UIImagePickerController *)imagePickerController didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
    chosenImage = info[UIImagePickerControllerOriginalImage]; 
    UIImage *imageWithCorrectOrientation = [self removeRotationForImage:chosenImage]; 
    .. 
    .. 
    .. 
} 
+0

メモリに保存した画像の数を制限することができます。たとえば、変数imageWithCorrectOrientationを作成すると、メモリに2つの大きな画像があります。 imageWithCorrectOrientationとselectedImageの両方 代わりにこれを試すことができます。 NSUserDefaults * ud = [NSUserDefaults standardUserDefaults]; selectedImage = info [UIImagePickerControllerOriginalImage]; selectedImage = [self removeRotationForImage:selectedImage]; – Jetpack

+0

私はエラーを見つけました。私は "UIImagePNGRepresentation"を使用しました。撮影した画像のサイズは10MB以上でした....今はUIImageJPEGRepresentationを使用していて、すべて正常に動作します。 – emrepb

答えて