【问题标题】:NSWindow property set with the assign attribute instead of the strongNSWindow 属性设置为 assign 属性而不是 strong
【发布时间】:2013-02-24 12:39:49
【问题描述】:

我注意到 Mac App 模板创建了以下内容:

@interface AppDelegate : NSObject

@property (assign) IBOutlet NSWindow *window;

根据 ARC 指南,所有顶级对象都应使用强属性,但这是使用分配属性。有人能解释一下为什么吗?

【问题讨论】:

  • 我的猜测是模板的缺陷。不会是第一个!不要仅仅因为它在 Apple 模板中而信任代码。

标签: macos


【解决方案1】:

窗口通常由File's Owner“拥有”,通常是您的NSApplication 实例(用于主笔尖)或NSWindowController 的实例,不一定是应用程序委托或窗口委托。这就是为什么不适合在委托类中使用强引用的原因。

在 Mac OS/X 10.7 中,NSWindow(以及其他几个 Cocoa 类)不支持通过 ARC 进行管理,因此向 NSWindow 声明的属性必须是 assign 而不是 strong 或 @987654330 @。有关更详细的讨论,请参阅 Transitioning to ARCNib Object Life Cycle 文档。基本答案是,您不能对覆盖 releaseretain 方法的对象使用 ARC 管理的引用。

在 10.8 中,NSWindow 似乎不在该列表中,但 Xcode 仍在生成 assign 属性而不是 weak

【讨论】:

  • 那么在 10.8 上将其更改为 weak 应该是安全的吗?
  • 如果苹果技术文档(请参阅上面的过渡到 ARC)是准确的,那么是的,将其更改为弱应该没问题。
猜你喜欢
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2023-03-17
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多