Каковы преимущества NSRunLoop по сравнению с таймером dispatch_source_t по сравнению с привязками ReactiveCocoa
В целях обучения я создаю приложение для визуального программирования на 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 для подключения сигналов от выходов к входам будет самым простым / более читаемым / более производительным решением;
- в противном случае, почему я должен выбрать запуск NSRunLoop для каждого из моих "конвейеров".
Я много читал о NSRunLoop, я вижу, что люди, вовлеченные в то есть. GStreamer в Какао управляется с помощью NSRunLoop, и Vuo использует его. Я думаю, я понимаю основы этого. Но я не понимаю, и это мой вопрос: каковы его преимущества?