ReactiveCocoa/ReactiveCocoa — pull request #917 by jspahrsummers (2013-11-03 23:59:02+00:00)
Title: [WIP] Add a compound disposable to <RACSubscriber>

**:warning: NOT READY TO MERGE :warning:**

_Depends on #915._

This replaces:

```objc
@protocol RACSubscriber
- (void)didSubscribeWithDisposable:(RACDisposable *)disposable;
@end

@interface RACSignal
+ (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe;
@end
```

with:

```objc
@protocol RACSubscriber
@property (nonatomic, strong, readonly) RACCompoundDisposable *disposable;
@end

@interface RACSignal
+ (RACSignal *)create:(void (^)(id subscriber))didSubscribe;
@end
```

Besides a more idiomatic name, and less need to explicitly specify block return types, this has some important consequences:

1. The subscriber passed into the block now clearly represents _one_ subscription. It won't (directly) be a `RACSubject`, for instance. This might mean we can get rid of `RACPassthroughSubscriber` internally — not sure yet.
1. Having a disposable _always_ in existence could eventually make it easier to terminate synchronous signals early, or open the door to a better pull-driven API than #808. This is dependent on overhauling subscription APIs too, though.
1. You can watch `subscriber.disposable.disposed` to know whether to cancel, obviating any need for explicit disposables in many cases.
1. Less memory load, because there's an existing compound disposable that can be used instead of creating new ones.
1. The behavior of disposing a subscription is now more clear — everything in the compound disposable, and every _other_ subscription to that same ``, will be disposed. This means you don't need to hold onto disposables from `-subscribe:` within `+create:`. (See the code for examples.)

**To do:**

- [ ] Clearly mention the above stuff in `RACSignal`'s documentation
- [ ] Try removing `RACPassthroughSubscriber`
- [ ] Investigate ways to update subscription APIs for terminable synchronous signals
- [ ] Test not saving the disposable of `-subscribe:` within `+create:`
- [ ] CHANGELOG