NSRunLoop与dispatch_source_t计时器和ReactiveCocoa绑定有什么好处

时间:2015-06-17 18:17:10

标签: macos cocoa reactive-cocoa nsrunloop visual-programming

出于学习目的,我正在OSX上构建一个visual programming应用程序。基本上它由一个通过输出连接的功能节点组成 - >输入并形成图表。

我正在使用深度优先搜索构建连接图(使用CoreData),然后在图形队列中执行每个节点:

NSTimeInterval secondsToFire = 1./250.;

NSString *dispatchName = [NSString stringWithFormat:@"info.oz432.timer.queue.%p", self];
dispatch_queue_t queue = dispatch_queue_create([dispatchName UTF8String], 0);

_timer = [self createWithInterval:secondsToFire inQueue:queue usingBlock:^{
    for (NSManagedObject *node in pipeline) {
        [self executeNode:[node objectID] inQueue:queue];
    }
}];

使用-createWithInterval:inQueue:usingBlock:

dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);

if (timer) {

    dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval * NSEC_PER_SEC, interval * NSEC_PER_SEC);
    dispatch_source_set_event_handler(timer, block);
    dispatch_resume(timer);

}

return timer;

现在它运作良好,但我想知道:

  • 如果使用 ReactiveCocoa 将信号从输出连接到输入 将是最简单/更易读/更高性能的解决方案;
  • 否则,我为什么要选择为每个'管道'运行 NSRunLoop。

我已经阅读了很多关于NSRunLoop的内容,我可以看到参与的人们。 Cocoa中的GStreamer正在使用NSRunLoop进行管理,Vuo正在使用它。我想我理解它的基础知识。但我不明白,这是我的问题:它有什么好处

0 个答案:

没有答案