我在我正在开发的应用程序中多次调用 ABAddressBookCreate()。对于 iOS >=6 兼容性,我想使用单例来检查对地址簿的访问并从单例返回 ABAddressBookRef。但是我不确定如何正确释放 ABAddressBookRef 实例,或者这种方法是否可以安全使用。
+(ABAddressBookRef)loadContacts {
ABAddressBookRef ref;
if ([self isABAddressBookCreateWithOptionsAvailable]) {
CFErrorRef error = nil;
ref = ABAddressBookCreateWithOptions(NULL,&error);
ABAddressBookRequestAccessWithCompletion(ref, ^(bool granted, CFErrorRef error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
[self showErrorDialog:@"Error"];
} else if (!granted) {
[self showErrorDialog:@"Not granted"];
}
});
});
// [(id)ref autorelease]; not working..
return ref;
} else {
// iOS 4/5
ref = ABAddressBookCreate();
// [(id)ref autorelease];
return ref;
}
}
在 ViewController 中调用:
ABAddressBookRef addressBook = [AddressBookAccess loadContacts];