NSWindow属性设置了assign属性而不是strong

时间:2012-05-23 14:38:23

标签: macos

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

  

@interface AppDelegate:NSObject

     

@property(assign)IBOutlet NSWindow * window;

根据ARC指南,所有顶级对象都应该使用强大的属性,而是使用assign属性。有人解释原因吗?

1 个答案:

答案 0 :(得分:1)

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

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

在10.8中,看起来NSWindow不在该列表中,但Xcode仍在生成weak属性而不是{{1}}。