2016-06-09 27 views
7

Creiamo un DisposeBag, e un Observable, sottoscrivere l'Observable e poi addDisposableTo(disposeBag), so quando il DisposeBag sta per deinit, si chiamerà dispose() per liberare risorse altrimenti si arriverà perdita di memoria.Quando dovremmo chiamare addDisposableTo (disposeBag) in RxSwift?

Se lo Observable invia Complete o Error che termina in tempo limitato. Quando lo Observable termina prima del deinit DisposeBag, è necessario chiamare addDisposableTo(disposeBag)? DisposeBag rilascia automaticamente l'osservatore che si è iscritto a esso quando ha ricevuto il messaggio terminato?

let disposeBag = DisposeBag() 

Observable.just("") 
    .subscribe { event in 
     print(event) 
    } 
    .addDisposableTo(disposeBag) 

Devo specificare .addDisposableTo(disposeBag) esplicitamente? Penso che dopo aver inviato "", lo Observable terminerà e rilascerà l'osservatore?

risposta

7

Se si è certi che il completamento del osservabili in un modo deterministico - come l'utilizzo di just nel tuo esempio, o utilizzando take, takeUntil, ecc -, si può scegliere di non utilizzare il DisposeBag.

Si potrebbe ottenere un avviso del compilatore, che in realtà spiega bene questo comportamento e come aggirare il problema. Ma in generale, è più a prova di futuro se si usa DisposeBag in ogni caso.

See: Unused disposable warning

0

borse Dispose sono utilizzati per tornare ARC come comportamento a RX. Quando una DisposeBag viene deallocata, chiamerà dispose su ciascuno dei prodotti usa e getta aggiunti.

Viene utilizzato per disporre di riferimenti vecchi che si passano nella chiusura e risorse che non sono più necessarie (e che apparentemente non sono state utilizzate): ad esempio una connessione HTTP aperta, una connessione di database o una cache.

Quindi, se disponiamo di risorse che è possibile lasciare, è necessario chiamarlo.

Altro in this article.

Problemi correlati