- (void)startRunning;
在主线程直接调用这个api会导致卡顿问题
苹果官网有指出这个需要在一个串行的异步线程中执行
官网介绍地址https://developer.apple.com/documentation/avfoundation/avcapturesession?language=objc
文档对这个方法的解释中提到了这个方法是同步方法,会阻塞当前线程,放在主线程会导致UI卡顿。
解决方式
- (void)sessionStartRunning{
dispatch_queue_t queue = dispatch_queue_create("session Queue", DISPATCH_QUEUE_SERIAL);
self.sessionQueue = queue;
dispatch_async(self.sessionQueue, ^{
[self.captureSession startRunning];
});
}
- (void)sessionStopRunning{
dispatch_async(self.sessionQueue, ^{
if (self.captureSession.isRunning) {
[self.captureSession stopRunning];
}
});
}
网友评论