メイン キューで 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 回ほど経つと、すべてが静かにクラッシュします。