Jeśli oświadczam [weak self]
na zamknięciu i odniesienie self
jako self?
wewnątrz UIView.animateWithDuration
aplikacja padnie:Referencja [słabe ja] jako jaźń? wewnątrz animateWithDuration powoduje awarii
someFunc() { [weak self] (success) -> Void in
UIView.animateWithDuration(0.25) {
self?.someView.alpha = 1;
}
}
z message sent to deallocated instance
ale gdybym ewentualnie rozpakować siebie przed czasem to robi 't
someFunc() { [weak self] (success) -> Void in
if let weakself = self {
UIView.animateWithDuration(0.25) {
weakself.someView.alpha = 1;
}
}
}
Dlaczego tak jest, myślę, że nie ma znaczenia, w jaki sposób powołuję się na słaby punkt Jeśli chcesz "po prostu" odpakować poprawnie self?
. Dla kontekście odbywa się to w UICellView
który jest zwalniane, kiedy opuszczają UICollectionViewController
EDIT: Zapisano błąd z jabłkiem: # 23492648
To jest naprawdę bardzo dziwne, pachnie jak błąd. Btw co jest niepotrzebnego ';'? Czy dzwonisz do funkcji, czy jest to właściwość? – Kametrixom
Dzięki za wskazanie tego, edytowałem to dla jasności zamiast 'doSomething'. Poprosiłem o użycie ';' w naszej bazie kodu, ponieważ sprawia, że koniec instrukcji jest jednoznaczny. Są sytuacje, w których możesz mieć oświadczenie zawijać linię i nie jest to zbyt oczywiste :) – Shizam
To jest dobry raport o błędzie i powinieneś zgłosić to firmie Apple. Ale jest również prawdą, że zawsze powinieneś robić słabo-mocny taniec, gdy słabo przekazywać rzeczy anonimowo, jak to robisz w drugim przykładzie ("jeśli pozwólcie słabo = sobie"), więc róbcie to i ruszajcie dalej. – matt