2017-04-13 17 views
0

我一直試圖在MacOS項目中使用Swift插座集合一段時間,並且只是剛剛瞭解到這一點目前不可行。我仍然困惑,爲什麼不呢,但假設這在某些時候被修正了,我還有一個擔憂。Swift IBOutlet集合並保留循環安全

據我所知,網點一般應薄弱,除「根」的出口,以防止保留週期:

@IBOutlet weak var someButton: NSButton! 

但我已經找到了集合語法的示例不包括弱修改,而我還沒有找到把它(1)是有道理的,和(2)沒有得到一個紅旗的地方:

@IBOutlet var severalButtons: [NSButton]! 

所以,我失去了一些東西明顯?我可以肯定,這樣的出口收集不會創造一個保留週期嗎? (假設他們曾被允許?)

+0

沒有理由讓網點「弱」,他們沒有創建一個參考週期。 – Sulthan

回答

1

IBActionIBOutlet不同,IBOutletCollection將類名稱作爲參數。作爲頂級對象,應該聲明IBOutletCollection強。這在here中有更詳細的解釋。

因此,由於此限制,IBOutletCollection有可能創建保留週期。

+0

我認爲我們處在同一頁面上:我明白集合本身必須有強大的參考,並且您確認我懷疑如果我不小心,集合數組中的強引用可能會導致問題。但在我的情況下,集合將被擁有(這是目前假設的,因爲MacOS)由接口根對象。因此界面內的所有權不再是簡單的樹,而是有向的非循環圖。但我認爲我會沒事的,因爲所有權仍然是「非循環的」。 –

+0

@JeffJ很高興你明白。那麼你在尋找什麼答案? –

+0

我認爲你已經儘可能地回答了我的問題。我擔心我錯過了一些東西,因爲集合的Swift語法似乎不允許設置弱插口引用的可能性,這仍然看起來很奇怪。除非你想知道爲什麼IB似乎無法識別MacOS項目中的集合的存在,但我被告知它在iOS項目中做得很好?否則,謝謝。 –