我是一位经验丰富的 iOS 开发人员,我决定尝试一些 AppKit 开发。我在 API 方面进行了一些调整,但除此之外,我发现 OS X 开发是,容我们说,“熟悉”。
我一直在 Interface Builder 中构建我的 AppKit UI,并注意到当我使用 WYSIWYG 编辑器在我的代码文件中创建属性时,Apple 正在创建以下内容:
@property (assign) IBOutlet NSTableView *tableView;
我觉得这很好奇,因为 iOS 中默认的做事方式会导致我这样做:
@property (nonatomic, retain) IBOutlet NSTableView *tableView;
我意识到,在 Mac 开发中,我没有在移动设备上那样的内存限制,在移动设备上,视图可能会被卸载,并且可能需要对 UI 元素的强引用。
在 AppKit 案例中,我可以很好地假设我的 UI 元素将始终存在,除非我摆弄视图层次结构并将其从其父视图中删除。为了防止无意中访问悬空指针,在任何时候都有一个强引用似乎是谨慎的。
为什么 Apple 在这里创建一个弱引用,而不是一个强引用?
我是否通过使用强引用(但在 中正确释放dealloc
)来为一些意想不到的后果做好准备?这里有一些我想念的模式吗?