File tree Expand file tree Collapse file tree 2 files changed +23
-3
lines changed Expand file tree Collapse file tree 2 files changed +23
-3
lines changed Original file line number Diff line number Diff line change @@ -61,8 +61,14 @@ - (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber {
61
61
@synchronized (subscribers) {
62
62
[subscribers addObject: subscriber];
63
63
}
64
-
64
+
65
+ @rac_weakify (subscribers, subscriber);
65
66
[disposable addDisposable: [RACDisposable disposableWithBlock: ^{
67
+ @rac_strongify (subscribers, subscriber);
68
+ if (!subscribers || !subscriber) {
69
+ return ;
70
+ }
71
+
66
72
@synchronized (subscribers) {
67
73
// Since newer subscribers are generally shorter-lived, search
68
74
// starting from the end of the list.
Original file line number Diff line number Diff line change @@ -72,14 +72,28 @@ - (void)didSubscribeWithDisposable:(RACCompoundDisposable *)disposable {
72
72
});
73
73
74
74
qck_it (@" should dispose the paired disposable when a subscription terminates" , ^{
75
- RACSubject* subject = [RACSubject new ];
76
- RACTestSubscriber* subscriber = [RACTestSubscriber new ];
75
+ RACSubject * subject = [RACSubject new ];
76
+ RACTestSubscriber * subscriber = [RACTestSubscriber new ];
77
77
78
78
[[subject subscribe: subscriber] dispose ];
79
79
80
80
expect (@(subscriber.disposable .disposed )).to (beTruthy ());
81
81
});
82
82
83
+ qck_it (@" should release the subscriber after subject deallocation" , ^{
84
+ __weak RACTestSubscriber *weakSubscriber;
85
+
86
+ @autoreleasepool {
87
+ RACTestSubscriber *subscriber = [RACTestSubscriber new ];
88
+ weakSubscriber = subscriber;
89
+ RACSubject *subject = [RACSubject subject ];
90
+
91
+ [subject subscribe: subscriber];
92
+ }
93
+
94
+ expect (weakSubscriber).to (beNil ());
95
+ });
96
+
83
97
qck_itBehavesLike (RACSubscriberExamples, ^{
84
98
return @{
85
99
RACSubscriberExampleSubscriber: subject,
You can’t perform that action at this time.
0 commit comments