1

メイン キューで UI を更新しようとすると、メモリ警告が表示されます。

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection

デリゲート メソッドは GCD の個別のシリアル キューで呼び出されるため、上記のメソッドで分析したフレームから UI を更新する場合は、次のように呼び出します。

long wait = dispatch_semaphore_wait(self.myUISemaphore, DISPATCH_TIME_FOREVER);
if(wait == 0)
{
    dispatch_semaphore_signal(self.myUISemaphore);
    dispatch_sync(dispatch_get_main_queue(), ^(void) {
    self.numberFinderMarksLabel.text = [NSString stringWithFormat:@"%d", self.data];
    });
}

ご覧のとおり、セマフォを使用しようとしましたが無駄でした。UIの呼び出し後にスレッドをロックしてロック解除しようとしましたが、それもうまくいきませんでした。これらのメモリ警告を止めるものは何もありません。5 回ほど経つと、すべてが静かにクラッシュします。

4

1 に答える 1

0

デリゲート メソッド内のすべてを次のようにラップします。

@autoreleasepool {

}

それは私のためにそれを修正しました。おそらくいくつかの CGImageRefs または解放していないものがあります。(ARC でも手動で行う必要があります)

于 2014-06-24T20:07:30.563 に答える