0
votes

Utilisation de RxSwift DisposeBag dans ViewController

Je suis nouveau dans le framework RxSwift . J'utilise des produits jetables dans mon ViewController et j'ajoute des produits jetables dans un DisposeBag .

Où dois-je désallouer le DisposeBag afin de disposer de tous les jetables? Dans viewDidAppear ou deinit du contrôleur? Quelle méthode est la plus sûre?


0 commentaires

3 Réponses :


2
votes

Si vous déclarez votre sac de disposition comme variable d'instance de votre sous-classe de contrôleur de vue, il sera désalloué automatiquement dès que votre contrôleur de vue sera désalloué. Autrement dit, s'il n'est pas conservé par autre chose également.


0 commentaires

0
votes

Si vous vous abonnez à vos observables dans la fonction viewWillAppear , vous devez alors désactiver votre disposeBag dans la fonction viewDidDisappear . Si vous vous abonnez à vos observables dans le viewDidLoad , alors ne vous inquiétez pas, le sac d'élimination se débarrassera automatiquement. Cette dernière méthode est standard.


0 commentaires

2
votes

À quoi sert un jetable

Les produits jetables sont ici pour représenter une poignée dans l'abonnement de l'observable. Lorsqu'il est éliminé, il annule le fonctionnement de l'observable. L'exemple le plus simple est une requête réseau. Lorsque l'élément jetable lié à cette demande est éliminé, si la demande ne s'est pas terminée, elle est annulée.

DisposeBag

Dispose bag rassemble plusieurs diposables dont les cycles de vie doivent être liés. Lorsque le sac est éliminé, tous les diposables qu'il contient sont également éliminés.

Où est-il judicieux de jeter un sac dans un View Controller

Maintenant que nous savons ce que font réellement les jetables, la question à laquelle nous devons répondre n'est plus "où dois-je disposer de mon sac", mais "quand est-il judicieux d'annuler mes abonnements?

Et ici, la réponse est vraiment liée au cas d'utilisation: parfois, vous voudrez arrêter tout travail si le contrôleur de vue n'est plus à l'écran. Dans ce cas, libérer le sac d'élimination dans viewDidDisappear: est une bonne option. D'autres fois, il est probablement préférable de laisser le sac de mise au rebut se libérer dans deinit (le cycle de vie des classes s'en chargera sans que vous ayez besoin de remplacer deinit), dans les cas où vous préférez avoir l'observable continuez à faire son travail même si le contrôleur de vue est absent de l'écran.

En conclusion, aucune méthode n'est plus sûre qu'une autre, cela ne dépend que de votre cas d'utilisation.


0 commentaires