Swift IBOutlet 集合和保留循环安全

Swift IBOutlet collections and retain cycle safety

一段时间以来,我一直在尝试在 MacOS 项目中使用 Swift outlet collections,直到现在才知道这目前是不可能的。我仍然不明白为什么不,但是假设这在某个时候被修改了,我还有另一个问题。

据我了解,除“根”出口外,出口通常应该较弱,以防止保留循环:

@IBOutlet weak var someButton: NSButton!

但是我找到的集合语法示例不包括 weak 修饰符,而且我还没有找到放置它的地方 (1) 有意义,而 (2) 没有得到红旗:

@IBOutlet var severalButtons: [NSButton]!

那么,我是不是漏掉了一些明显的东西?我能确定这样的 outlet 集合不会创建保留循环吗? (假设他们曾经被允许?)

IBOutletCollectionIBActionIBOutlet 不同,它采用 class 名称作为参数。作为顶级对象,IBOutletCollection 应该声明为 strong。对此有更详细的解释 here

因此,由于此限制,IBOutletCollection 有可能创建保留循环。