Objective c 视图控制器类的出口应该是弱的还是强的?OSX应用程序

Objective c 视图控制器类的出口应该是弱的还是强的?OSX应用程序,objective-c,cocoa,nib,nspopover,Objective C,Cocoa,Nib,Nspopover,这就是我所做的 创建一个干净的OSX项目 转到main.xib并拖动popover控制器。这在interface builder上创建了2个可见对象 我转到appDelegate.h文件并执行了以下操作 `-@属性(分配)IBMOutlet NSViewController*popVC 然后,我转到applicationdFinishLaunching:方法并执行了以下操作 popVC=[[NSViewController alloc]init] 结果:我收到以下错误消息: nib上的对象不应

这就是我所做的

  • 创建一个干净的OSX项目
  • 转到main.xib并拖动popover控制器。这在interface builder上创建了2个可见对象
  • 我转到appDelegate.h文件并执行了以下操作

    `-@属性(分配)IBMOutlet NSViewController*popVC

  • 然后,我转到
    applicationdFinishLaunching:
    方法并执行了以下操作

    popVC=[[NSViewController alloc]init]

  • 结果:我收到以下错误消息:


    nib上的对象不应该是弱的,因为它已经属于nib了吗?

    查看控制器的出口应该是
    strong
    。NIB并不拥有这些对象,它只是一个存档。视图的出口通常应
    ,但这是因为视图由其superview保留(superview通常由其视图控制器保留)


    顺便说一句,你不应该做:

    popVC = [[NSViewController alloc] init];
    

    因为加载NIB时,
    popVC
    未归档、创建和设置。通过自己创建和设置一个实例,您就放弃了NIB版本。这适用于所有插座-当NIB加载时,我希望填充插座的用途。

    我总是选择
    strong
    ,我从未发现任何需要
    弱的情况,是的,对于代理,我使用
    不安全的
    @AnoopVaidya为什么不
    弱的
    呢?@Abizern:我想
    弱的
    在解除分配时将
    指针。这就是您想要的代理<代码>不安全\u未恢复
    如果您使用的是全圆弧,则不需要。@Wain我可能会过早地选择此选项作为正确选项。请给我最后一个解释?这种行为不仅仅发生在IB插座上的NSViewController对象上。他们都是这样。现在我真的很困惑。我可以把我的示例项目压缩后发送给你,让你明白我的意思吗?如果你想把代码放到GitHub上或上传到某个地方并在这里添加链接,我会看一看。xib中顶级项目的出口应该很强,这些顶级对象的任何子视图都可以作为弱iboutlet添加,因为它们被顶级项强烈引用。@Wain Abizern填入缺少的部分。谢谢各位。