1

Я несколько озадачен объектами жизни под ARC. Вот сценарий, который, я думаю, распространен.Понимание NSPopover с ARC

1) В ответ на какое-то событие была загружена NSViewController из наконечника.

- (IBAction) doIt: (id) sender 
{ 
    InfoController *editor=[[InfoController alloc]initWithNibName:@"InfoController" bundle:nil]; 
    [editor show: .... ] 
} 

2) Затем InfoController отображает NSPopover.

3) Спустя некоторое время пользователь нажимает кнопку NSPopover. Поппер закрывается.

Но когда выходит InfoController? В этом отношении, что удерживает его в живых после возвращения doIt? В моей реализации InfoController является источником данных и делегатом для элементов управления в своем NSPopover, но в целом источники данных и делегаты не сохраняются, не так ли?

ответ

3

Я понимаю ваш вопрос немного стар, но я наткнулся на нее в то время как исследуя сохранить цикл с моей NSViewController и NSPopover:

contentViewController NSPopover свойства удерживающего ваш NSViewController. Вот почему вы можете показать popover, как вы (и я), как ответ на действие, без сохранения другого объекта. Однако я обнаружил, что для правильного выпуска NSViewController в ARC, contentViewController должен быть установлен на нуль, когда popover будет закрыт. Это в моем подклассе NSViewController:

- (void)popoverDidClose:(NSNotification *)notification 
{ 
    self.popover.contentViewController = nil; 
} 
+0

Отнюдь не устарело; благодаря! У вас есть ссылка на публикацию для публикации содержимого? Я бы ожидал, что метод шаблона сделает это, если понадобится. –