web-dev-qa-db-fra.com

iOS Swift Combine: annuler un ensemble <AnyCancellable>

Si j'ai stocké un ensemble annulable dans un ViewController:

private var bag = Set<AnyCancellable>()

Qui contient plusieurs abonnements.

1 - Dois-je annuler l'abonnement in deinit? ou il fait le travail automatiquement?

2 - Si oui, comment annuler tous les abonnements enregistrés?

bag.removeAll() is enough?

ou dois-je parcourir l'ensemble et annuler tous les abonnements un par un?

for sub in bag {
   sub.cancel()
}

Apple dit que l'abonnement est actif jusqu'à ce que AnyCancellable stocké soit en mémoire. Je suppose donc que la désallocation des annulations avec bag.removeAll() devrait suffire, n'est-ce pas?

6
Andrea Miotto

Essayez de créer un pipeline et de ne pas stocker l'annulable dans une variable d'état. Vous constaterez que le pipeline s'arrête dès qu'il rencontre une opération asynchrone. C'est parce que l'annulation a été nettoyée par ARC et elle a donc été automatiquement annulée. Vous n'avez donc pas besoin d'appeler annuler sur un pipeline si vous libérez toutes les références à celui-ci.

De la documentation :

Une instance AnyCancellable appelle automatiquement cancel () lorsqu'elle est désinitialisée.

2
Gil Birman