Я озадачен.
Я пытаюсь получить список всего адреса электронной почты, который имеет человек. Я использую ABPeoplePickerNavigationController
выбрать человека, который все кажется прекрасным. Я устанавливаю мой
ABRecordRef personDealingWith;
от person
аргумент
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
и все кажется прекрасным до этой точки. В первый раз, когда следующий код выполняется, все хорошо. Когда впоследствии выполнено, я могу получить проблемы. Во-первых, код:
// following line seems to make the difference (issue 1)
// NSLog(@"%d", ABMultiValueGetCount(ABRecordCopyValue(personDealingWith, kABPersonEmailProperty)));
// construct array of emails
ABMultiValueRef multi = ABRecordCopyValue(personDealingWith, kABPersonEmailProperty);
CFIndex emailCount = ABMultiValueGetCount(multi);
if (emailCount > 0) {
// collect all emails in array
for (CFIndex i = 0; i < emailCount; i++) {
CFStringRef emailRef = ABMultiValueCopyValueAtIndex(multi, i);
[emailArray addObject:(NSString *)emailRef];
CFRelease(emailRef);
}
}
// following line also matters (issue 2)
CFRelease(multi);
Если скомпилировано, как записано, никаких ошибок или проблем статического анализа. Это отказывает с a
*** -[Not A Type retain]: message sent to deallocated instance 0x4e9dc60
ошибка.
Но ожидайте, существует больше! Я могу зафиксировать его любым из двух способов.
Во-первых, я могу не прокомментировать NSLog во главе функции. Я получаю утечку от NSLog's ABRecordCopyValue
каждый раз через, но код, кажется, хорошо работает.
Кроме того, я могу прокомментировать
CFRelease(multi);
в конце, который делает точно то же самое. Ошибки статической компиляции, но выполняющий код.
Таким образом без утечки, эта функция катастрофические отказы. Для предотвращения катастрофического отказа мне нужно к памяти кровоизлияния. Ни один не отличное решение.
Кто-либо может указать на то, что продолжается?