2015-12-24 5 views
0
ABMultiValueRef phonesRef = ABRecordCopyValue(person, kABPersonPhoneProperty); 
    for (int i=0; i < ABMultiValueGetCount(phonesRef); i++) 
    { 
     CFStringRef currentPhoneLabel = ABMultiValueCopyLabelAtIndex(phonesRef, i); 
     CFStringRef currentPhoneValue = ABMultiValueCopyValueAtIndex(phonesRef, i); 

     if (currentPhoneLabel != nil && currentPhoneValue != nil) 
     { 
      if (CFStringCompare(currentPhoneLabel, kABPersonPhoneMobileLabel, 0) == kCFCompareEqualTo) 
      { 
       [contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"workNumber"]; 
      } 

      if (CFStringCompare(currentPhoneLabel, kABHomeLabel, 0) == kCFCompareEqualTo) 
      { 
       [contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"homeNumber"]; 
      } 
     } 
     else if (currentPhoneValue != nil && currentPhoneLabel == nil) 
     { 
      [contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"workNumber"]; 
     } 

     CFRelease(currentPhoneLabel); 
     CFRelease(currentPhoneValue); 
    } 
    CFRelease(phonesRef); 

Вот мой код для импорта контактов телефонов в моем Ios приложение, но когда currentPhoneLabel равна нулю xocde для CFRelease (currentPhoneLabel). Я не знаю, почему это происходит. Любая помощь будет очень заметной.CFStringRef релиз дает плохой доступ, когда он равен нулю

Благодаря

+0

Я имею в виду снизу StackOverflow ответы, которые о релиз памяти, в вашем журнале сбоев, если на этой метке нет данных, как это освободить память? это должно быть крах? http://stackoverflow.com/questions/17959760/do-i-need-to-manually-release-cfstringref –

ответ

0

У вас уже есть охранники в других местах в коде, так что вам просто нужно добавить охранника на каждом вызове CFRelease(), а также:

if (currentPhoneLabel != NULL) 
    CFRelease(currentPhoneLabel); 
// etc. 

 Смежные вопросы

  • Нет связанных вопросов^_^