2012-01-06 2 views
0

J'utilise ARC dans mon projet et je suis averti d'une fuite de mémoire potentielle (voir les lignes commentées) sur ce qui suit. Je ne sais pas comment le gérer.fuite de mémoire peoplePicker utilisant 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 

Tout conseil serait apprécié.

Merci d'avance.

Répondre

3

ARC ne gère que la mémoire des objets Objective-C, de sorte phoneProperty retourné par ABRecordCopyValue (Le Copy dans la méthode indique qu'il a été retenu) doit être libéré par votre application en utilisant CFRelease.

2

Peu importe si l'ARC est utilisé, vous devez vous-même manipuler CFMemory. Additionnez le code ci-dessous avant de partir:

if (phoneProperty){ 
CFRelease(phoneProperty); 
}