Swift IBOutlet集合并保留循环安全

问题描述:

我一直试图在MacOS项目中使用Swift插座集合一段时间,并且只是刚刚了解到这一点目前不可行。我仍然困惑,为什么不呢,但假设这在某些时候被修正了,我还有一个担忧。Swift IBOutlet集合并保留循环安全

据我所知,网点一般应薄弱,除“根”的出口,以防止保留周期:

@IBOutlet weak var someButton: NSButton! 

但我已经找到了集合语法的示例不包括弱修改,而我还没有找到把它(1)是有道理的,和(2)没有得到一个红旗的地方:

@IBOutlet var severalButtons: [NSButton]! 

所以,我失去了一些东西明显?我可以肯定,这样的出口收集不会创造一个保留周期吗? (假设他们曾被允许?)

+0

没有理由让网点“弱”,他们没有创建一个参考周期。 – Sulthan

IBActionIBOutlet不同,IBOutletCollection将类名称作为参数。作为*对象,应该声明IBOutletCollection强。这在here中有更详细的解释。

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

+0

我认为我们处在同一页面上:我明白集合本身必须有强大的参考,并且您确认我怀疑如果我不小心,集合数组中的强引用可能会导致问题。但在我的情况下,集合将被拥有(这是目前假设的,因为MacOS)由接口根对象。因此界面内的所有权不再是简单的树,而是有向的非循环图。但我认为我会没事的,因为所有权仍然是“非循环的”。 –

+0

@JeffJ很高兴你明白。那么你在寻找什么答案? –

+0

我认为你已经尽可能地回答了我的问题。我担心我错过了一些东西,因为集合的Swift语法似乎不允许设置弱插口引用的可能性,这仍然看起来很奇怪。除非你想知道为什么IB似乎无法识别MacOS项目中的集合的存在,但我被告知它在iOS项目中做得很好?否则,谢谢。 –