Ho una classe Swift che deve memorizzare una tabella con i propri metodi. Sfortunatamente ciò sta causando un ciclo di riferimento, poiché la sua tabella mantiene i riferimenti a self
tramite i metodi memorizzati.Rendersi debole nei metodi in Swift
esempio di codice che perde di seguito:
typealias Callback =()->()
class CycleInducingClass : NSObject {
var myCallbacks = [Callback]()
override init() {
super.init()
myCallbacks.append(myInternalFunction)
}
func myInternalFunction() {
NSLog("lolol: %d", self.myCallbacks.count)
}
}
L'unica soluzione che ho trovato finora è quello di fare invece questo:
myCallbacks.append({[unowned self] in self.myInternalFunction()})
che è abbastanza brutto, e soggetto a errori. Qualche idea migliore? C'è qualche trucco per rendere deboli i riferimenti alle funzioni? per rendere la matrice myCallbacks
di tipo myCallbacks : [WeakCallback]()
o qualcosa del genere? Per quanto posso dire non riesco nemmeno a costruire una funzione di convenienza weaken
come zucchero sintattico sopra il brutto involucro di chiusura sopra.
come aggiungere un parametro a myInternalFunction? che potrebbe essere dichiarato debole ..... non bello però –
Ho anche provato a chiudere tutte le mie funzioni interne, cioè "lasciare myInternalFunction = {[self proprietario] in ...}" che funziona, ma è anche piuttosto brutta. – wxs