使用ARC了解NSPopover

时间:2013-06-17 15:47:02

标签: cocoa automatic-ref-counting nsviewcontroller nspopover

我对ARC下的对象生命周期感到有些困惑。这是一个我认为可能很常见的情景。

1)响应某个事件,从nib加载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 个答案:

答案 0 :(得分:4)

我意识到你的问题现在有点老了,但我在使用NSViewController和NSPopover研究保留周期时遇到了它:

NSPopover contentViewController属性保留了您的NSViewController。这就是为什么你可以像你(和我)那样显示像一个动作的响应一样的弹出窗口,而没有另一个对象保留它。我发现,要在ARC下正确释放NSViewController,当弹出窗口关闭时,contentViewController应该设置为nil。这是我的NSViewController子类:

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