在didOutputSampleBuffer中调用主队列时的内存警告

时间:2013-03-26 07:20:33

标签: xcode memory-management ios6 avfoundation grand-central-dispatch

当我尝试从以下位置更新主队列上的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后解锁,但这也无效。什么都没有阻止那些记忆警告。五点左右之后,整个事情都在默默地崩溃。

1 个答案:

答案 0 :(得分:0)

使用以下内容包装委托方法中的所有内容:

@autoreleasepool {

}

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