RxSwift:共享vs重播vs shareReplay

共享订阅:返回的可观察对象共享对源可观察对象的单个基础订阅。 所有这些运算符都是这种情况。

Connectable:返回的observable不会在调用connect()函数之前推送事件。 这允许多个订阅者在发送任何事件之前进行订阅。

参考计数:返回的可观察参考计数其拥有的订户数量。 当订阅者的数量从零变为一时,订阅可观察的源。 当数字从一变为零时,退订并配置可观察的源。 注意: 每当订户数量为零到一时,基础可观察项将被重新订阅。 但是,一次可观察到的源订阅永远不会超过一个,并且所有并发订阅者将共享对可观察到的源的同一订阅。 如果基础可观察对象完成或发送错误,则可能不会重新订阅基础可观察对象。 我建议避免使用此灰色区域,可以通过确保在参考计数降至零后不再有其他订户来完成此操作。

重播事件:操作员将从可观察到的订阅源重播事件,这些订户在发送这些事件后会看到。 对于replay(bufferSize)shareReplay(bufferSize) ,事件数最多为bufferSize 。 对于shareReplayLatestWhileConnected() ,最多重播一个事件。 当订户的参考计数下降到零时,将清除重播缓冲区。 因此,导致引用计数从零增加到1的订户不会重播事件。

如果有主题,也可以使用multicast运算符。 但是,此处描述的运算符是最受欢迎的,并且最可能对大多数应用程序有用。