4

バーストモードで画像を撮影するアプリがありますが、画像が撮影されてプレビューが表示されると、クラッシュし、エラーが表示され、「メモリ不足によりアプリが終了しました」と表示されます

ユーザーがカメラボタンを押したままにすると、より多くの画像を撮る必要があります...ボタンを離した後、すべての画像をスライドショーとして表示する必要があります..どうすればよいですか?

私のコードは次のとおりです。

- (void)longPress:(UILongPressGestureRecognizer*)gesture {
    if (gesture.state == UIGestureRecognizerStateBegan) {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(takePictures)
                                                     name:AVCaptureSessionDidStartRunningNotification object:nil];
    }
    else if (gesture.state == UIGestureRecognizerStateEnded)
    {
    }


-(void)takePictures
{
    [imagePicker takePicture];
}

助けて..

4

1 に答える 1

2

画像の解像度が高いため、画像を RAM に保存するにはコストがかかります。さらに、オブザーバーが原因で takePicture が複数回呼び出されます - 多すぎます。imagePicker を使用して複数の写真を撮ると、これらすべての画像がすぐに RAM を消費します。iOS にはスワップがないため、RAM が不足します。Jetsam/memorystatus が起動し、大量のメモリを消費したためにアプリを強制終了します。

これを回避する方法:

A) バースト モードで撮影する写真を減らします。j などのグローバル変数を使用し、takePictures でインクリメントしますが、実際の画像は j % 2 == 0 または j %3 ==0 でのみ撮影します (値をいじる必要があります)。

B) 少なくともいくつかの写真をストレージに保存してから、それらを RAM から解放します (写真への参照を削除します)。

于 2013-10-31T21:01:56.243 に答える