我有一个 GCD 绘图队列来更新我的 OpenGL ES 场景,其结构如下:
- (void)drawFrame {
dispatch_async(drawingQueue, ^{
if (dispatch_semaphore_wait(frameRenderingSemaphore, DISPATCH_TIME_NOW) != 0) {
return;
}
@autoreleasepool {
[self startDrawing];
// drawing code
[self endDrawing];
}
dispatch_semaphore_signal(frameRenderingSemaphore);
});
}
当应用程序退出活动或进入后台(两者)时,我通过使 CADisplayLink 无效来停止 OpenGL 绘图运行循环。
然而,问题是即使在 CADisplayLink 失效之后,dispatch_asyn 也会调度绘图块。当用户按下主页按钮时,我的应用程序崩溃,因为它试图在 OpenGL 中绘制一个框架,即使 iOS 已经拆除了上下文。
有没有办法杀死/暂停 GCD 队列,使其不再分派任何东西?