2017-03-08 12 views
1

ここでは私のコードです:「名前」に格納されたオブジェクトの潜在的なリーク

[ NSUInteger peopleCounter = 0; //set a initial value as ZERO. 

//Create custom Contacts list 
for (peopleCounter = 0; peopleCounter < [arrayOfAllPeople count]; peopleCounter++) { 

    ABRecordRef thisPerson = (__bridge ABRecordRef) [arrayOfAllPeople objectAtIndex:peopleCounter]; // get every person record one by one. 

    NSString *name = (__bridge NSString *) ABRecordCopyCompositeName(thisPerson); //get a person name 

    ABMultiValueRef number = ABRecordCopyValue(thisPerson, kABPersonPhoneProperty); //get a person number 

    //optimize a phone numbers 
    for (NSUInteger emailCounter = 0; emailCounter < ABMultiValueGetCount(number); emailCounter++) { 

     NSString *email = (__bridge NSString *)ABMultiValueCopyValueAtIndex(number, emailCounter); 
     ][1] 

答えて

0

あなたはCFStringRefのようにCore Foundationのオブジェクトを返すことABRecordCopyCompositeNameのようにその名前にコピーとメソッドを使用すると、あなたが考える必要がありますARCは状況をどのように処理すべきかを教えない限り動作しません。あなたのケースでは

あなたの代わりに__bridge__bridge_transferを使用する必要があります。

NSString *name = (__bridge_transfer NSString *) ABRecordCopyCompositeName(thisPerson); //get a person name 

のでABRecordCopyCompositeName結果寿命がname変数生涯にリンクされます。例:ABMultiValueCopyValueAtIndex

関連する問題