Предупреждение о памяти при вызове основной очереди в didOutputSampleBuffer

Я получаю предупреждения о памяти, когда пытаюсь обновить пользовательский интерфейс в основной очереди из:

- (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];
    });
}

Как видите, я безуспешно пытался использовать семафоры. Я попытался заблокировать поток и разблокировать после вызова пользовательского интерфейса, но это тоже не сработало. Ничто не останавливает эти предупреждения памяти. После пяти или около того все бесшумно рушится.


person mrplants    schedule 26.03.2013    source источник


Ответы (1)


Оберните все внутри вашего метода делегата с помощью:

@autoreleasepool {

}

Это исправило это для меня. Вероятно, у вас есть какие-то CGImageRefs или что-то, что вы не освобождаете. (Что нужно делать вручную, даже в ARC)

person Devan Buggay    schedule 24.06.2014