【问题标题】:Should an outlet to a view controller class be weak or stong? OSX app视图控制器类的出口应该是弱的还是强的? OS X 应用程序
【发布时间】:2013-06-19 19:31:33
【问题描述】:

这就是我所做的。

  1. 创建一个干净的 OSX 项目。
  2. 转到 main.xib 并拖动一个弹出框控制器。这在界面生成器上创建了 2 个可见对象。
  3. 我去了 appDelegate.h 文件并做了

    `-@Property (assign) IBOutlet NSViewController *popVC;

  4. 然后我去了applicationDidFinishLaunching:方法并做了

    popVC = [[NSViewController alloc] init];

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

nib 上的对象是否应该很弱,因为它已经由 nib 拥有?

【问题讨论】:

  • 我总是选择strong,我从来没有发现任何需要weak的情况,对于我使用unsafe_unretained的代表来说是的。
  • @AnoopVaidya 为什么不对代表使用weak
  • @Abizern:我猜weaknil 释放时的指针。
  • 这是您想要的代表。如果您使用完整的 ARC,则不需要 unsafe_unretained

标签: objective-c cocoa nib nspopover


【解决方案1】:

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


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

popVC = [[NSViewController alloc] init];

因为 popVC 在加载 NIB 时被取消归档、创建和设置。通过自己创建和设置实例,您将丢弃 NIB 版本。这适用于所有插座 - 加载 NIB 时我要填写的插座的用途。

【讨论】:

  • @Wain 我可能选择这个为正确的有点太早了。请问最后一个解释?这种行为不仅发生在 IB 插座上的 NSViewController 对象上。它发生在所有人身上。现在我真的很困惑。我可以压缩我的示例项目并将其发送给您,以便您明白我的意思吗?
  • 如果您想将代码放在 GitHub 上或上传到某个地方并在此处添加链接,我会看看。
  • xib 中顶级项目的出口应该是强的,这些顶级对象的任何子视图都可以添加为弱 IBOutlets,因为它们被顶级项目强烈引用。
  • @Wain Abizern 填补了缺失的部分。谢谢大家。
猜你喜欢
  • 2015-06-07
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多