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 后锁定线程并解锁,但这也不起作用。没有什么能阻止那些内存警告。五点左右之后,整个事情都无声无息地崩溃了。

4

1 回答 1

0

将所有内容包装在您的委托方法中:

@autoreleasepool {

}

那为我修好了。你可能有一些 CGImageRefs 或者你没有释放的东西。(必须手动完成,即使在 ARC 中也是如此)

于 2014-06-24T20:07:30.563 回答