当我尝试从以下位置更新主队列上的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后解锁,但这也无效。什么都没有阻止那些记忆警告。五点左右之后,整个事情都在默默地崩溃。
答案 0 :(得分:0)
使用以下内容包装委托方法中的所有内容:
@autoreleasepool {
}
为我修好了。你可能有一些CGImageRefs或者你没有释放的东西。 (必须手动完成,即使在ARC中)