2

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

我正在使用深度优先搜索构建连接图(使用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将信号从输出连接到输入将是一种最简单/更易读/性能更高的解决方案;
  • 否则,我为什么要选择为我的每个 'pipelines' 运行一个 NSRunLoop

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

4

0 回答 0