Gibt es so etwas? Gibt es einen Unterschied zwischen den beiden unten? Ist einer mehr "korrekt" als der andere?Optimieren der Aufnahmelisten
Alle Objekte sind Eigenschaften von self
(sagen wir ein View-Controller) und haben die gleiche Lebensdauer wie self
. Wir können ein Objekt mit einer kürzeren Lebensdauer als self
einführen, das wäre weak
, aber die gleiche Frage gilt.
objectOne.doSomething { [unowned self] in
self.objectTwo.finish()
self.tableView.reloadData()
// self.someDelegate?.didFinishSomething()
}
vs
objectOne.doSomething {
[unowned objectTwo = self.objectTwo,
unowned tableView = self.tableView
// weak someDelegate = self.delegate
] in
objectTwo.finish()
tableView.reloadData()
// someDelegate?.didFinishSomething()
}
hat Apple dieses Beispiel in their docs:
lazy var someClosure:() -> String = {
[unowned self, weak delegate = self.delegate!] in
// closure body goes here
delegate?.doSomething()
}
In diesem Fall delegate
kann eine kürzere Lebensdauer haben als self
, aber warum es nicht so benutzen?
lazy var someClosure:() -> String = {
[unowned self] in
// closure body goes here
self.delegate?.doSomething()
}
Das macht sehr viel Sinn, danke! Dies sollte dann ein Grund für das Verhalten in meiner Antwort sein: Die 'faule' Init wird ausgelöst, wenn die Schließung erklärt wird, kombiniert mit der Tatsache, dass sie sich in einem anderen Thread befindet als andere Trigger. – Roland