我有一些Swift代碼可以與Objective C互操作,並且我注意到我在泄漏,我將其縮小到NSMutableArray而不是刪除我的閉包,這裏是一個純粹的斯威夫特片段,重現了這個問題:將Swift閉包對象添加到NSMutableArray,然後刪除它不起作用 - 泄露
let myClosure : ((String?) ->())! = { (fileName: String?) in
}
let arr = NSMutableArray()
arr.add(myClosure)
arr.remove(myClosure)
有沒有人遇到過 - 爲什麼會發生這種情況?我怎樣才能使它工作?
我無法工作,因爲封閉無法比較相等:https://stackoverflow.com/questions/24111984/how-do-you-test-functions-and-closures-for-equality。 - 在Q&A中也有可能的解決方法,例如將閉包封裝在處理程序類中。 –
謝謝你,想着做你的建議,然後改變我的API如下 - 將閉合添加到數組的方法返回其索引,並從數組中刪除它的方法使用前一個方法返回的索引。 –