Si verifica questo arresto anomalo quando si cattura un'istanza di una classe @objc
(scritta in swift, ma annotata con @objc
e sottoclasse di NSObject
). Succede quando la chiusura viene assegnata e non quando viene chiamata, quindi il problema non è che il valore catturato venga deallocato e quindi chiamato la chiusura. Succede casualmente, a volte si blocca prima, a volte più tardi. Stavo sperimentando questo bug nelle precedenti versioni di Swift (penso che fosse Swift 1.2), ma ora sto usando 2.1 e anche questo crash._swift_abortRetainUnowned quando si cattura la classe @objc come sconosciuta
Funziona bene quando cambio [unowned x]
-[weak x]
e quindi accedere con la forza scartare x!.doSomething()
che mi porta a credere che si tratta di un bug in Swift, piuttosto che nel mio codice. Tuttavia, prima di aprire un ticket su bugs.swift.org, volevo avere più occhi su questo per essere certo di non mancare nulla.
E 'stato anche detto qui:
http://www.codeproject.com/Articles/791304/Resolving-strong-references-between-Swift-and-Obje
qui:
https://www.reddit.com/r/swift/comments/3vhwmj/unowned_bug_in_closure_causes_attempted_to_retain/
e qui:
https://forums.developer.apple.com/thread/9873
Ma a cambiare la cattura di weak
e la forza scartare un secondo momento, non esiste una soluzione .
hai trovato quello che ogni stato la causa e perché non si lavora quando si utilizza senza proprietario all'interno di una lista di cattura? – Whirlwind
No, non ho, ho dovuto cambiare tutte le [unowned x] in [weak x] per sbarazzarsi di questi arresti anomali. –