代码之家  ›  专栏  ›  技术社区  ›  Chiron

为什么我在试图释放的时候得到了EXC_BAD_的访问权限?

  •  0
  • Chiron  · 技术社区  · 15 年前

    请看一下我的代码:

    (void)loadContactsFromAddressBook {
    ABAddressBookRef addressBook = ABAddressBookCreate();
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex count = ABAddressBookGetPersonCount(addressBook);
    ABRecordRef person;
    
    for (int i = 0; i < count; i++) {
        person = CFArrayGetValueAtIndex(allPeople, i);
        CFStringRef cfStr = ABRecordCopyValue(person, kABPersonFirstNameProperty);
        NSString* firstName = (NSString*) cfStr;
        [contacts addObject:firstName]; 
        CFRelease(cfStr);
    }
    
    CFRelease(addressBook);
    CFRelease(allPeople);
    }
    

    我试图在for块后CFRelease(person),但应用程序因EXC_BAD_ACCESS而崩溃。如果我删除CFRelease(person),则应用程序工作。

    1 回复  |  直到 15 年前
        1
  •  9
  •   Joshua Nozzi    15 年前

    你没有创建这个人,你只是引用了它。