标签:queue main 主线 dispatch 相机 handler 权限 bug
问题:
在调用相机时,进行了权限请求,发生了Crash。
原因:
在相机权限请求回调中,不在主线程,故唤起UIImagePickerController时发生崩溃。
分析:
1、相机的权限请求
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
//The completion handler is called on an arbitrary dispatch queue.
//It is the client's responsibility to ensure that any UIKit-related updates are called on the main queue or main thread as a result.
//意思是:completionHandler会在任意队列上执行,我们要确保在主线程中执行。
}
But,为什么测试没有测出来?因为在已经授权时,这个handler会在主线程中执行;
那相册权限呢?
2、相册权限请求
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
//Photos may call your handler block on an arbitrary serial queue.
//If your handler needs to interact with UI elements, dispatch such work to the main queue.
//在官方api中的note叙述如上,可知,与相机类似。
}];
解决:
很简单了,在回掉中,切到主线程中。
PS:附带三种回主线程的方法。
参考:https://blog.csdn.net/cordova/article/details/54933729
// 1.NSThread
[self performSelectorOnMainThread:@selector(updateUI) withObject:nil waitUntilDone:NO];
- (void)updateUI {
}
// 2.NSOperationQueue
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
}];
// 3.GCD
dispatch_async(dispatch_get_main_queue(), ^{
});
标签:queue,main,主线,dispatch,相机,handler,权限,bug 来源: https://blog.csdn.net/mumusan360/article/details/100586041
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。