iOS:dispatch_get_global_queue QOS_CLASS_BACKGROUND在7.1.2上崩溃
我有以下代码片段,通过使用块获取联系人:
if (&ABAddressBookCreateWithOptions != NULL) { CFErrorRef error = nil; addressBook = ABAddressBookCreateWithOptions(NULL, &error); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { dispatch_sync(dispatch_get_main_queue(), ^{ if (error) { //... } else if (!granted) { //... } else { // access granted //... } }); });
它在7.1.2
和8.1.3
版本上都能正常工作。
但是,当我尝试将dispatch_get_main_queue
更改为dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)
它适用于8.1.3
但在7.1.2
上崩溃
if (&ABAddressBookCreateWithOptions != NULL) { CFErrorRef error = nil; addressBook = ABAddressBookCreateWithOptions(NULL, &error); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { dispatch_sync(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^{ // BAD ACCESS if (error) { //... } else if (!granted) { //... } else { // access granted //... } }); });
QOS_CLASS_
标识符是在iOS 8中引入的。如果要支持iOS 7,则需要使用DISPATCH_QUEUE_PRIORITY_
标识符。