出于学习目的,我正在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;
现在它运作良好,但我想知道:
我已经阅读了很多关于NSRunLoop的内容,我可以看到参与的人们。 Cocoa中的GStreamer正在使用NSRunLoop进行管理,Vuo正在使用它。我想我理解它的基础知识。但我不明白,这是我的问题:它有什么好处?