На данный момент я не уверен, могут ли эти утечки быть связаны с CoreData или чем, так как я испытал 48-байтовые утечки strdup в других частях этого же приложения по очевидно другим причинам - см. Мой другой вопрос: другой вопрос переполнения стека
Но, не имея отношения, у меня есть viewController, который, основываясь на выборе пользователем опции, представляет ABPeoplePicker. Тем не менее, кажется, просто представляя сборщик, который я пропускаю, независимо от выбора контакта или нет.
Код для представления сборщика:
- (void)showPeoplePickerController
{
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonEmailProperty]];
picker.peoplePickerDelegate = self;
[self presentModalViewController:picker animated:YES];
[picker release];
}
И методы делегата реализованы следующим образом:
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker
{
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
return YES;
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
{
ABMultiValueRef emails = ABRecordCopyValue(person, property);
if(userEmailString)
[userEmailString release];
userEmailString = (NSString*)ABMultiValueCopyValueAtIndex(emails, identifier);
CFRelease(emails);
[[NSNotificationCenter defaultCenter] postNotificationName:@"recipientEmailDidUpdateNotification"
object:self];
return NO;
}
И на всякий случай userEmailString является сохраненным свойством NSString контроллера (имеется в виду, что я мог бы также использовать self.userEmailString = blah).
Это скриншоты из приборов, сообщающие об утечке. Но обратите внимание, что он считает, что сборщик не был выпущен, хотя я звоню релизу после его представления. И я также попытался сделать CFRelease () вместо ... но все тот же.