2013-09-13 2 views
1

Я использую следующий код для инициализации адресной книги в моем приложении: -ABAddressBookRef утечки памяти

@property(nonatomic,assign) ABAddressBookRef addressBookRef; 
self.addressBookRef=ABAddressBookCreateWithOptions(NULL, NULL); 

Однако анализатор Xcode дает мне следующее сообщение: -

call to function 'ABAddressBookCreateWithOptions' returns a Core Foundation Object with a +1 retain count 

сейчас , насколько я уже прочитал, я могу «удалить» вышеуказанное предупреждение следующими двумя способами: -

  • Релиз addressBookRef с использованием CFRelease
  • Вместо self.addressBookRef используйте _addressBookRef во втором заявлении.

Однако, какой из них будет лучшим способом и почему?

ответ

2

Все API-интерфейсы CoreFoundation с именем create в своем имени возвращают объект CF с сохранением +1. Затем вам понадобится release новый объект CF, когда закончите с ним. Пример с именованием:

CFRelease(self.addressBookRef);

Я настоятельно рекомендую прочитать этот ответ тоже: iOS 6 Address Book not working?

+0

право. Но если мы непосредственно используем _addressBookRef, почему анализатор xcode не дает предупреждения относительно его выпуска? – Max

+0

@Max: Не знаю, почему это не дает предупреждения - извините. Обычно, если я использую объект CF, я его создаю, использую, а затем отпускаю, а не сохраняю ссылку на него. –

+0

ОК. Спасибо. На данный момент я буду использовать CFRelease. – Max

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