diff --git a/ReactiveObjC/RACReplaySubject.m b/ReactiveObjC/RACReplaySubject.m index 30475fa9e..ee97ff9e9 100644 --- a/ReactiveObjC/RACReplaySubject.m +++ b/ReactiveObjC/RACReplaySubject.m @@ -85,11 +85,12 @@ - (RACDisposable *)subscribe:(id)subscriber { - (void)sendNext:(id)value { @synchronized (self) { [self.valuesReceived addObject:value ?: RACTupleNil.tupleNil]; - [super sendNext:value]; if (self.capacity != RACReplaySubjectUnlimitedCapacity && self.valuesReceived.count > self.capacity) { [self.valuesReceived removeObjectsInRange:NSMakeRange(0, self.valuesReceived.count - self.capacity)]; } + + [super sendNext:value]; } } diff --git a/ReactiveObjCTests/RACSubjectSpec.m b/ReactiveObjCTests/RACSubjectSpec.m index 3a5766a8b..bfe56a5b5 100644 --- a/ReactiveObjCTests/RACSubjectSpec.m +++ b/ReactiveObjCTests/RACSubjectSpec.m @@ -96,6 +96,21 @@ - (void)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable { qck_beforeEach(^{ subject = [RACReplaySubject replaySubjectWithCapacity:1]; }); + + qck_it(@"should send same latest value to multiple subscribers in another subscription", ^{ + __block NSMutableArray *values = [NSMutableArray array]; + + [subject subscribeNext:^(id _Nullable item1) { + [values addObject:item1]; + [[subject take:1] subscribeNext:^(id _Nullable item2) { + [values addObject:item2]; + }]; + }]; + [subject sendNext:@1]; + [subject sendNext:@2]; + + expect(values).to(equal(@[@1, @1, @2, @2])); + }); qck_it(@"should send the last value", ^{ id firstValue = @"blah";