Сохраняет ли ABPersonViewController CFRetain свой displayPerson ABRecordRef?

ABRecordRef addressBookRecord = ...;
ABNewPersonViewController *newPersonViewController = [[[ABNewPersonViewController alloc] init] autorelease];
newPersonViewController.newPersonViewDelegate = delegate;
newPersonViewController.displayedPerson = addressBookRecord;

Безопасно ли

CFRelease(addressBookRecord);

?

Существует ли стандартный шаблон CoreFoundation, о котором я не знаю?


person Heath Borders    schedule 25.01.2010    source источник


Ответы (1)


Я не думаю, что вызывать CFRelease безопасно.
DisplayPerson определяется следующим образом в заголовке.
Таким образом, displayPerson просто присваивается, а не копируется и не сохраняется, когда мы устанавливаем значение.
Поэтому я думаю, мы не можем его выпустить.

@property(nonatomic, readwrite) ABRecordRef displayedPerson
person tomute    schedule 25.01.2010
comment
ABRecordRef — это структура, поэтому я не думаю, что мы можем делать выводы о владении памятью на основе этого свойства. - person Heath Borders; 27.01.2010
comment
Согласно справочнику по ОС iPhone, ABRecordRef — это просто const void *. Итак, я думаю, что это похоже на примитивный тип, такой как int. Я предполагаю, что ABNewPersonViewController просто хранит в нем указатель. Так что, если вы выйдете раньше, это может быть проблемой. - person tomute; 28.01.2010