私のアプリは、次のようなAVCaptureSessionを使用して複数のショットを撮ります。
[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error){
@try {
if (imageSampleBuffer != nil) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
[self setImageView:imageView1 withImage:image];
}
}@catch (NSException *exception) {
}@finally {}
}
ユーザーが連続して10ショットを撮影し(1秒ごとのショットが開始される)、それをさらに3回繰り返すと、アプリはその4回目にクラッシュします。ほとんどの場合、これはメモリの問題が原因です。写真の設定は次のとおりです。
captureSession.sessionPreset = AVCaptureSessionPresetHigh;
これは実際には1280x720です-最高ではありません。AVCaptureSessionPresetPhotoに切り替えると、写真の解像度が向上しましたが、10枚の写真を撮ったときに初めてアプリがクラッシュするようになりました。
私が持っている2つの主な質問があります。
1)高解像度を維持し、アプリがクラッシュしないようにするにはどうすればよいですか?
2)高解像度の画像データを処理して十分に効率的にするにはどうすればよいですか?
注:今日、私は撮影プロセス中に受信した画像データをUIImageViewに設定し、撮影が完了したら、各UIImageViewからハードドライブに画像を保存します。これは、すべての画像を受信したらハードドライブに保存するよりも効率的であるように思われました。しかし、私はまだそのアプローチが好きではありません。
PS:メモリの問題なしに複数の高解像度画像を頻繁に撮影するアプリを見てきました。