ReactiveCocoa和NSThread游乐场

时间:2015-07-16 09:54:01

标签: ios objective-c reactive-programming reactive-cocoa

我发现了一些代码,我不太明白它是如何工作的:

RACSignal *oneNumberEverySecond = [[RACSignal
                                    interval:1.0f
                                    onScheduler:[RACScheduler scheduler]]
                                   scanWithStart:@0 reduce:^id(NSNumber *running, NSDate *next) {
                                       return @(running.unsignedIntegerValue + 1);
                                   }];
[oneNumberEverySecond subscribeNext:^(id x) {
     NSLog(@"%@", x);
 }];

[NSThread sleepForTimeInterval:5.0f];

当我发表评论[NSThread sleepForTimeInterval:5.0f]时,信号会停止发送值。为什么呢?

1 个答案:

答案 0 :(得分:3)

原因是[NSThread sleepForTimeInterval: 5.0f]使这个信号在后台线程上运行。这意味着只有当它的线程由OS运行时它才会起作用。当你调用[NSThread sleepForTimeINterval: 5.0f];时看起来它的工作原因是因为它将阻止在给定时间内调用它的任何线程。在你的情况下,它将阻止主线程,这将允许操作系统给你的背景信号时间。如果你注释掉{{1}},你会看到它仍然有效,但我的路径并不总是开火。