ABMultiValueCopyArrayOfAllValues Потенциальная утечка объекта
Я пытаюсь исправить "потенциальную утечку объекта". У меня есть предупреждение на
NSArray *phones = (__bridge_transfer NSArray *)ABMultiValueCopyArrayOfAllValues(ABRecordCopyValue(person, kABPersonPhoneProperty));
и то же самое на
NSArray *phones = (__bridge_transfer NSArray *)ABMultiValueCopyArrayOfAllValues(ABRecordCopyValue(person, kABPersonPhoneProperty));
Утверждение Xcode: вызов функции 'ABRecordCopyValue' возвращает базовый базовый объект с сохраняемым счетчиком +1. Утечка объекта: на выделенный объект не ссылаются позже в этом пути выполнения, а счет сохранения равен +1
Я не понимаю, как это исправить.
-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{
NSString *firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString *lastName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
NSString *fullName = @"";
if (firstName != nil) {
fullName = [fullName stringByAppendingString:firstName];
}
if (lastName != nil) {
fullName = [NSString stringWithString:[fullName stringByAppendingString:@" "]];
fullName = [NSString stringWithString:[fullName stringByAppendingString:lastName]];
}
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
[tempArray addObject:fullName];
[contactsArray addObject:tempArray];
_userNameTextField.text = [tempArray objectAtIndex:0];
CFRelease((__bridge CFTypeRef)(firstName));
CFRelease((__bridge CFTypeRef)(lastName));
NSArray *phones = (__bridge_transfer NSArray *)ABMultiValueCopyArrayOfAllValues(ABRecordCopyValue(person, kABPersonPhoneProperty));
NSArray *emails = (__bridge_transfer NSArray *)ABMultiValueCopyArrayOfAllValues(ABRecordCopyValue(person, kABPersonEmailProperty));
if (phones) {
[tempArray addObject:[phones objectAtIndex:0]];
}
else{
[tempArray addObject:@"No phone number was set."];
}
if (emails) {
[tempArray addObject:[emails objectAtIndex:0]];
}
else{
[tempArray addObject:@"No e-mail was set."];
}
// Now add the tempArray into the contactsArray.
_mobPhoneTextField.text = [tempArray objectAtIndex:1];
_emailTextField.text = [tempArray objectAtIndex:2];
[[contacts presentingViewController] dismissViewControllerAnimated:YES completion:nil];
return NO;
}
1 ответ
Решение
Вы должны разделить
NSArray *phones = (__bridge_transfer NSArray *)ABMultiValueCopyArrayOfAllValues(ABRecordCopyValue(person, kABPersonPhoneProperty));
в отдельные команды, так что вы можете освободить объект, возвращенный ABRecordCopyValue()
:
CFTypeRef values = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSArray *phones = (__bridge_transfer NSArray *)ABMultiValueCopyArrayOfAllValues(values);
CFRelease(values);