Я получаю предупреждения о памяти, когда пытаюсь обновить пользовательский интерфейс в основной очереди из:
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
Метод делегата вызывается в отдельной последовательной очереди в GCD, поэтому, когда я хочу обновить пользовательский интерфейс из кадров, которые я проанализировал в приведенном выше методе, я вызываю:
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];
});
}
Как видите, я безуспешно пытался использовать семафоры. Я попытался заблокировать поток и разблокировать после вызова пользовательского интерфейса, но это тоже не сработало. Ничто не останавливает эти предупреждения памяти. После пяти или около того все бесшумно рушится.