One option here is to not `@weakify(self)` and capture `self` naturally in the signal. Then the caller doesn't need to save the `RBTCentralManager` (in an ivar as one does).

```objc
RBTCentralManager *manager = [[RBTCentralManager alloc] initWithOptions:nil];
// do stuff with manager.stateSignal, implicitly retain ownership of the manager
```