在我的一个应用程序中,我使用了 dispatch_queue 并在其中声明了一个 dispatch_asyc
队列来检查地址簿。现在,当编译器到达返回语句时,它会导致应用程序崩溃。下面是我的源代码。
dispatch_queue_t queue = dispatch_queue_create("abc", NULL);
dispatch_async(queue, ^{
// Request authorization to Address Book
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
// First time access has been granted...
// All good.
completionBlock?completionBlock(YES):nil;
dispatch_async(queue, ^{
if (addressBookRef) {
CFRelease(addressBookRef);
};
});
return;
});
最佳答案
根据documentation on Address Book , 你不能跨线程使用 ABAddressBookRef
Important: Instances of ABAddressBookRef cannot be used by multiple threads. Each thread must make its own instance by calling ABAddressBookCreate.
参见 this question有关如何执行此操作的更多想法:
关于ios - 应用程序在 iPhone 中的 dispatch_queue 内崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364224/