Ich weiß, dass das folgende ein Speicherverlust verursacht, weil sich MyClass
und myClosure
gegenseitig referenzieren.Wird diese Schließung ein Speicherleck verursachen?
var MyClass {
var myVar = 0
let myClosure: (Int) -> Void
init() {
self.myClosure = { x in
self.myVar = x
}
}
}
Führt das Folgende auch zu einem Speicherverlust? Warum oder warum nicht?
var MyClass {
var myVar = 0
function myFunc() {
let myClosure = { x in
self.myVar = x
}
myClosure(0)
}
}
Selbst in diesem Fall zu vermeiden Aufruf kann nicht freigegeben werden, weil es eine starke Referenz. Der einzige Fall, in dem es zu einem schlechten Zugang führen kann, ist, wenn Sie unowned self verwenden. – stefos
Es ist tatsächlich besser so, weil die Aufhebung der Zuordnung nicht gestartet wird, bis die Funktion beendet ist – Daniel