1

我在我正在开发的应用程序中多次调用 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];
4

1 回答 1

0

我相信这个方法已经存在于 ABAddressBook 类中:

  • (ABAAddressBook *)sharedAddressBook

请参阅此处了解更多信息。

于 2013-09-30T08:21:36.947 回答