Iphone 为什么我在尝试发布时会得到“EXC\u BAD\u ACCESS”?

Iphone 为什么我在尝试发布时会得到“EXC\u BAD\u ACCESS”?,iphone,objective-c,memory-management,Iphone,Objective C,Memory Management,请看一下我的代码: (void)loadContactsFromAddressBook { ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex count = ABAddressBookGetPersonCount(addressBook); ABRecordRef person;

请看一下我的代码:

(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块之后释放CFReleaseperson,但应用程序因“EXC\u BAD\u ACCESS”而崩溃。如果我删除了CFReleaseperson,应用程序就会工作。

您没有创建此人,只是引用了它。在这里插入孩子支持笑话。

通常只调用释放,如果你已经分配,init或拷贝daaAIK,我们也应该释放核心基础对象,我正在发布addressBook和allPeople,应用程序正在运行。这是因为方法名称中包含create或copy。我可以说任何Apple Core框架中的方法名称都告诉我们是否必须发布吗?例如,名为copy或create的方法意味着我们必须发布?