1

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

@interface AppDelegate : NSObject

@property (assign) IBOutlet NSWindow *window;

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

4

1 回答 1

2

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

在 Mac OS/X 10.7 中,NSWindow(以及其他几个 Cocoa 类)不支持通过 ARC 进行管理,因此声明的属性NSWindow必须是assign而不是strongor weak。有关更详细的讨论,请参阅过渡到 ARCNib 对象生命周期文档。基本答案是您不能对覆盖releaseandretain方法的对象使用 ARC 管理的引用。

在 10.8 中,看起来 NSWindow 不在该列表中,但 Xcode 仍在生成assign属性而不是weak.

于 2013-02-23T22:29:25.957 回答