2017-03-08 60 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

當您在其名稱中使用方法與副本ABRecordCopyCompositeName被返回的Core Foundation對象像CFStringRef你應該想想內存管理,因爲除非你告訴它應該如何處理情況,否則ARC不工作。

在你的情況,你應該使用__bridge_transfer而不是__bridge

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

所以ABRecordCopyCompositeName結果壽命將被鏈接到name可變生命。

注意ABMultiValueCopyValueAtIndex也在你的例子中。