我对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中的控件的数据源和委托,但是通常不保留数据源和委托,对吗? 最佳答案
我意识到您的问题现在有点老了,但是我在用NSViewController和NSPopover研究保留周期时遇到了这个问题:
NSPopover contentViewController
属性保留您的NSViewController。这就是为什么您可以像您(和我)一样显示弹出窗口作为对动作的响应,而没有其他对象保留它的原因。但是我发现,要在ARC下正确释放NSViewController,在关闭弹出框时,应将contentViewController
设置为nil。这在我的NSViewController子类中:
- (void)popoverDidClose:(NSNotification *)notification
{
self.popover.contentViewController = nil;
}
关于cocoa - 通过ARC了解NSPopover,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17151632/