Понимание NSPopover с ARC

Я несколько озадачен продолжительностью жизни объектов в 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, но в целом источники данных и делегаты не сохраняются, верно?

1 ответ

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

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

- (void)popoverDidClose:(NSNotification *)notification
{
    self.popover.contentViewController = nil;
}
Другие вопросы по тегам