2012-01-06 3 views
0

Я использую ARC в своем проекте и предупреждаю о потенциальной утечке памяти (см. Прокомментированные строки) о следующем. Не знаете, как справиться с этим.peoplePicker memory leak using 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 

Любой совет будет оценен по достоинству.

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

ответ

3

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

2

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

if (phoneProperty){ 
CFRelease(phoneProperty); 
}