Понимание 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;
}