私はメモリリークの問題があります。私はこのコードが正しく動作しないと思いますか?Objective-Cメモリリーク(VideoTooplbox、MediaToolBox、AVFoundation)
ユーズケース:
フルスクリーンイメージ(ポートレート)を取得し、UIImageviewに保存します。
問題:撮影した画像と保存された画像が同じではありません。保存した後、UIImageviewで画像の回転が横長になりました。
ソリューション:変化画像の向き(参照removeRotationForImage)
新しい問題:時々私は「使用絵」ボタン上の画像を押しを取る場合、ビューのフリーズ。そしてメモリリーク。
どうすればこの問題を解決できますか?
{
-(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];
..
..
..
}
メモリに保存した画像の数を制限することができます。たとえば、変数imageWithCorrectOrientationを作成すると、メモリに2つの大きな画像があります。 imageWithCorrectOrientationとselectedImageの両方 代わりにこれを試すことができます。 NSUserDefaults * ud = [NSUserDefaults standardUserDefaults]; selectedImage = info [UIImagePickerControllerOriginalImage]; selectedImage = [self removeRotationForImage:selectedImage]; – Jetpack
私はエラーを見つけました。私は "UIImagePNGRepresentation"を使用しました。撮影した画像のサイズは10MB以上でした....今はUIImageJPEGRepresentationを使用していて、すべて正常に動作します。 – emrepb