我注意到Mac App模板创建了以下内容:
@interface AppDelegate:NSObject
@property(assign)IBOutlet NSWindow * window;
根据ARC指南,所有顶级对象都应该使用强大的属性,而是使用assign属性。有人解释原因吗?
答案 0 :(得分:1)
窗口通常由File's Owner
“拥有”,通常是您的NSApplication
实例(针对主笔尖)或NSWindowController
的实例,不一定是应用代理或窗口代表。这就是为什么在委托类中引用强大是不合适的原因。
在Mac OS / X 10.7中,NSWindow
(以及其他几个Cocoa类)不支持通过ARC进行管理,因此NSWindow
的声明属性必须为assign
而不是strong
weak
或release
。有关更详细的讨论,请参阅Transitioning to ARC和Nib Object Life Cycle文档。基本答案是,您不能对覆盖retain
和assign
方法的对象使用ARC管理的引用。
在10.8中,看起来NSWindow不在该列表中,但Xcode仍在生成weak
属性而不是{{1}}。