ios - 调用 CFRelease(ABAddressBookRef ref) 时崩溃

标签 ios

这是我的代码,运行最后一行CFRelease(addressBook),程序崩溃!帮帮我吧~!

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);

NSMutableArray *groups = [NSMutableArray arrayWithCapacity:ABAddressBookGetGroupCount(addressBook)];
NSMutableArray *people = [NSMutableArray arrayWithCapacity:ABAddressBookGetGroupCount(addressBook)];

[(NSArray *)CFBridgingRelease(ABAddressBookCopyArrayOfAllGroups(addressBook)) enumerateObjectsUsingBlock:^(id obj_g, NSUInteger idx, BOOL *stop) {
    ABRecordRef g = (__bridge ABRecordRef)obj_g;
    NSString *gname = CFBridgingRelease(ABRecordCopyCompositeName(g));

    NSMutableArray *gp = [[[NSArray alloc] init] mutableCopy];

    [(NSArray *)CFBridgingRelease(ABGroupCopyArrayOfAllMembers(g)) enumerateObjectsUsingBlock:^(id obj_p, NSUInteger idx, BOOL *stop) {
        ABRecordRef p = (__bridge ABRecordRef)obj_p;
        ABMultiValueRef numbers = ABRecordCopyValue(p, kABPersonPhoneProperty);

        NSString *pname = CFBridgingRelease(ABRecordCopyCompositeName(p));

        [(NSArray *) CFBridgingRelease(ABMultiValueCopyArrayOfAllValues(numbers)) enumerateObjectsUsingBlock:^(id obj_n, NSUInteger idx, BOOL *stop) {
            NSString *pnumber = CFBridgingRelease(CFBridgingRetain(obj_n));

            MasMsContact *new_c = [[MasMsContact alloc] init];
            new_c.name = pname;
            new_c.number = pnumber;
            new_c.group = gname;

            [gp addObject:new_c];
        }];

        CFRelease(numbers);
        CFRelease(p);
    }];

    CFRelease(g);

    [people addObject:[gp copy]];
    [groups addObject:gname];
}];

#warning crash when release addressBook, why ???
if (addressBook) CFRelease(addressBook);

Xcode when crash

最佳答案

您不拥有 obj_pobj_g,因此当您释放桥接引用然后从该枚举 block 中弹出时,它们会被过度释放。仅当您使用创建复制访问核心基础对象时,您才拥有它们。

关于ios - 调用 CFRelease(ABAddressBookRef ref) 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035489/

相关文章:

ios - Firebase ML Kit 超过了 GitHub 的文件大小限制

ios - 如何在 iOS 11 中制作类似 Appstore 的页面

ios - NSString 方法 stringByTrimmingCharactersInSet : not trimming comma

ios - 选择多个图像(UIImagePickerController 或 Photos.app 共享 UI)

ios - 具有自动布局的 UITableViewCell 中的 UILabel 高度错误

ios - 当我以编程方式创建 TableView 时,未执行 didSelectRowAtIndexPath 方法

iphone - 如何在 iphone 应用程序中设置 uitextfield 边框颜色

ios - 如何根据用户对图像的触摸获得 X 和 Y 坐标,该坐标在任何设备上都相同

objective-c - 将文件从临时目录复制到资源文件夹

iphone - Collection View iOS 7