утечка памяти в PeoplePicker при использовании ARC - PullRequest
0 голосов
/ 06 января 2012

Я использую ARC в своем проекте, и меня предупреждают о потенциальной утечке памяти (см. Закомментированные строки) в следующем.Не уверен, как справиться с этим.

-( BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
  shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{

ABMultiValueRef phoneProperty = ABRecordCopyValue(person,property);
  // Call to function 'ABRecordCopyValue' returns a Core Foundation object with a +1 retain count

int idx = ABMultiValueGetIndexForIdentifier (phoneProperty, identifier);    

emailToValue= (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(phoneProperty,idx);
  // Object Leaked: object allocated and stored into 'phoneProperty' is not referenced   later in this execution path and has a retain count of +1

Буду признателен за любой совет.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 06 января 2012

ARC управляет только памятью для объектов Objective-C, поэтому phoneProperty, возвращаемое ABRecordCopyValue (Copy в методе указывает, что оно было сохранено), должно быть освобождено вашим приложением с помощью CFRelease.

2 голосов
/ 03 февраля 2012

Независимо от того, используется ли ARC, вы оба должны обращаться с CFMemory самостоятельно.Добавьте код ниже перед отъездом:

if (phoneProperty){
CFRelease(phoneProperty);
}
...