合并:取消 Set<AnyCancellable> 或删除其所有存储的对象以停止订阅



如果我有一组AnyCancelle:

var observations: Set<AnyCancellable> = []

从集合中删除所有对象有什么区别:

observations.removeAll()

或取消每次订阅:

observations.forEach { $0.cancel() }

它们有同样的效果吗?或者在任何订阅中都有强引用的情况下,如果调用.removeAll(),则不会消除强引用?如果它们具有相同的效果,我想使用第一种方法将是一种很好的做法,因为您不需要遍历所有集合。

如果有对集合中任何可取消项的强引用,这意味着其他方对它们感兴趣,因此它们应该而不是被明确取消。

删除引用意味着observations的所有者不再对这些可取消项感兴趣。如果这是唯一拥有的引用,那么将自动取消。

如果你明确地取消了每个可取消的引用,并且你错误地有其他强引用,那么你可能掩盖了这些错误的影响,使它们更难找到。如果你故意有其他强有力的推荐信,你会有一些你意想不到的事情被取消。所以清空布景。

最新更新