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.28.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_标识符。