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