Ios 如何创建一个只接收一次信号,然后取消订阅/释放自身的ReactiveCocoa订户?

Ios 如何创建一个只接收一次信号,然后取消订阅/释放自身的ReactiveCocoa订户?,ios,objective-c,reactive-programming,reactive-cocoa,Ios,Objective C,Reactive Programming,Reactive Cocoa,我目前正在注册一个属性信号的订户,如下所示: [RACAble(self.test) subscribeNext:^(id x) { NSLog(@"signal fired!"); }]; 默认功能是每次更改self.test时都会触发,但我只希望它触发一次,然后取消订阅。当我创建此订阅服务器时,是否有一个“once”参数或修饰符可以传递给RAC?您也可以这样做(如果您不喜欢简洁): [[RACAble(self.test) take:1] subscribeNext:^(

我目前正在注册一个属性信号的订户,如下所示:

[RACAble(self.test) subscribeNext:^(id x) {
        NSLog(@"signal fired!");
 }];
默认功能是每次更改self.test时都会触发,但我只希望它触发一次,然后取消订阅。当我创建此订阅服务器时,是否有一个“once”参数或修饰符可以传递给RAC?

您也可以这样做(如果您不喜欢简洁):

[[RACAble(self.test) take:1] subscribeNext:^(id x) {
    NSLog(@"signal fired!");
}];
[RACSignal createSignal:^RACSignal*(id订户){
RACDisposable*内部处理器=[RACAble(self.test)subscribeNext:^(id x){
[用户发送下一步:x];
[用户发送完成];
}];
返回[RAC一次性处置带块:^{
[内部处理器处置];
}];
}];

这可能会有帮助,尤其是在创建嵌套订阅时:

RACDisposable *subscription = [RACObserve(self, test) subscribeNext:^(id x) {
         NSLog(@"signal fired!");
}];
[subscription dispose];
以下几点:


没有理由过多地使用它,它可能会引入一些微妙的错误(比如
self
上的保留周期)。谢谢,这促使我将一些信号生成方法重构为更为合理的方法。
RACDisposable *subscription = [RACObserve(self, test) subscribeNext:^(id x) {
         NSLog(@"signal fired!");
}];
[subscription dispose];
__block RACDisposable *subscription = [RACObserve(self, test) subscribeNext:^(id x) {
    [subscription dispose];
    NSLog(@"signal fired!");
}];