【问题标题】:RACCommand - dispose executing signalRACCommand - 处理执行信号
【发布时间】:2016-10-10 03:26:56
【问题描述】:

我对@9​​87654321@ 的处理机制有点困惑。我想手动处理执行信号的订阅,但disposableBlock 仅在sendCompleted 事件之后调用。这是我真正的任务的问题,希望有人能帮助我。

- (void)test {
    RACCommand *rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
        return [self signal];
    }];

    RACDisposable *rac_dispose = [[rac_command execute:nil] subscribeNext:^(id x) {}];
    [rac_dispose dispose];
}

- (RACSignal *)signal {
    return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [subscriber sendNext:nil];
            [subscriber sendCompleted];
        });
        return [RACDisposable disposableWithBlock:^{
            NSLog(@"dispose block");
        }];
    }];
}

【问题讨论】:

    标签: ios objective-c reactive-cocoa


    【解决方案1】:

    对您的块参数(对初始化程序)创建的信号的订阅是 RACCommand 私有的,并且它不提供任何 API 来处理这些订阅。无论您是否处置从 -[RACCommand execute:] 返回的信号,RACCommand 都会使该订阅保持活动状态,直到它完成。

    换句话说,不幸的是,没有办法做你想做的事。如果您需要取消模块参数创建的信号行为的能力,请考虑让这些信号检查某些条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多