It might be represented like that using -[RACMulticastConnection autoconnect]
:
RACSignal* data1FromNetwork = ...;
RACSignal* data1FromNetworkHub = [[data1FromNetwork publish] autoconnect];
// Or below if you want replaying behavior.
// RACSignal* data1FromNetworkHub = [[data1FromNetwork multicast:RACReplaySubject.subject] autoconnect];
RACSignal* derivedData = [data1FromNetworkHub flattenMap:...];
RACSignal* data2FromNetwork = ...;
RACSignal* result = [RACSignal combineLatest:@[data1FromNetworkHub, derivedData, data2FromNetwork] reduce:...];
When the signal returned by -autoconnect
got to have no subscribers, the underlying signal (data1FromNetwork
in this case) would be disposed.