Swift IBS收集并保持循环安全

Swift IBS收集并保持循环安全,swift,macos,retain-cycle,iboutletcollection,Swift,Macos,Retain Cycle,Iboutletcollection,一段时间以来,我一直在尝试在MacOS项目中使用Swift outlet collections,只是刚刚了解到这在目前是不可能的。我仍然不明白为什么不能,但假设在某一点上这是修正的,我还有另一个担心 我理解,除“根”出口外,出口通常应较弱,以防止滞留循环: @IBOutlet weak var someButton: NSButton! 但是我发现集合语法的示例不包括弱修饰符,而且我还没有找到一个地方来放置它(1)有意义,(2)没有得到红旗: @IBOutlet var severalBut

一段时间以来,我一直在尝试在MacOS项目中使用Swift outlet collections,只是刚刚了解到这在目前是不可能的。我仍然不明白为什么不能,但假设在某一点上这是修正的,我还有另一个担心

我理解,除“根”出口外,出口通常应较弱,以防止滞留循环:

@IBOutlet weak var someButton: NSButton!
但是我发现集合语法的示例不包括弱修饰符,而且我还没有找到一个地方来放置它(1)有意义,(2)没有得到红旗:

@IBOutlet var severalButtons: [NSButton]!

那么,我是否遗漏了一些明显的东西?我能确定这样一个门店集合不会产生一个保留周期吗?(假设它们曾经被允许?

iAction
iOutlet
不同,
iOutletCollection
将类名作为参数。作为顶级对象,
IBOutletCollection
应声明为强。这将得到更详细的解释


因此,由于这一限制,
IBOutletCollection
有可能创建一个保留周期。
IBOutletCollection
IBAction
IBOutlet
不同,它将类名作为参数。作为顶级对象,
IBOutletCollection
应声明为强。这将得到更详细的解释


因此,由于这一限制,iOutletCollection有可能创建一个保留周期。

没有理由使outlets
,他们没有创建一个参考周期。没有理由使outlets
,他们没有创建引用循环。我想我们的观点是一致的:我确实理解集合本身必须有一个强引用,而您证实了我的怀疑,即如果我不小心,集合数组中的强引用可能会导致问题。但在我的例子中,集合将由接口根对象拥有(目前这是假设的,因为MacOS)。因此,接口中的所有权不再是一个简单的树,而是一个有向无环图。但我想我会没事的,因为所有权仍然是“非循环的”。@JeffJ很高兴你能理解。那么你在寻找什么答案呢?我想你已经尽可能地回答了我。我担心我遗漏了一些东西,因为集合的Swift语法似乎不允许设置弱的outlet引用,这看起来仍然很奇怪。除非你想试一下为什么IB似乎没有意识到MacOS项目中存在集合,而我被告知它在iOS项目中做得很好?否则,谢谢。我想我们的观点是一致的:我确实理解集合本身必须有一个强引用,而您证实了我的怀疑,即如果我不小心,集合数组中的强引用可能会导致问题。但在我的例子中,集合将由接口根对象拥有(目前这是假设的,因为MacOS)。因此,接口中的所有权不再是一个简单的树,而是一个有向无环图。但我想我会没事的,因为所有权仍然是“非循环的”。@JeffJ很高兴你能理解。那么你在寻找什么答案呢?我想你已经尽可能地回答了我。我担心我遗漏了一些东西,因为集合的Swift语法似乎不允许设置弱的outlet引用,这看起来仍然很奇怪。除非你想试一下为什么IB似乎没有意识到MacOS项目中存在集合,而我被告知它在iOS项目中做得很好?否则,谢谢。