2015-12-23 10 views
6

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 .

+0

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

+0

No, non ho, ho dovuto cambiare tutte le [unowned x] in [weak x] per sbarazzarsi di questi arresti anomali. –

risposta

2

solito preferiscono usare questo codice al posto di unowned quando ho a che fare con alcune classi objc inclusi:

[weak self] in 
guard let strongSelf = self else { return } 
// use strongSelf below 
Problemi correlati