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 集合不会创建保留循环吗? (假设他们曾经被允许?)
IBOutletCollection
与 IBAction
或 IBOutlet
不同,它采用 class 名称作为参数。作为顶级对象,IBOutletCollection
应该声明为 strong。对此有更详细的解释 here。
因此,由于此限制,IBOutletCollection
有可能创建保留循环。
一段时间以来,我一直在尝试在 MacOS 项目中使用 Swift outlet collections,直到现在才知道这目前是不可能的。我仍然不明白为什么不,但是假设这在某个时候被修改了,我还有另一个问题。
据我了解,除“根”出口外,出口通常应该较弱,以防止保留循环:
@IBOutlet weak var someButton: NSButton!
但是我找到的集合语法示例不包括 weak 修饰符,而且我还没有找到放置它的地方 (1) 有意义,而 (2) 没有得到红旗:
@IBOutlet var severalButtons: [NSButton]!
那么,我是不是漏掉了一些明显的东西?我能确定这样的 outlet 集合不会创建保留循环吗? (假设他们曾经被允许?)
IBOutletCollection
与 IBAction
或 IBOutlet
不同,它采用 class 名称作为参数。作为顶级对象,IBOutletCollection
应该声明为 strong。对此有更详细的解释 here。
因此,由于此限制,IBOutletCollection
有可能创建保留循环。