Каковы преимущества 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 использует его. Я думаю, я понимаю основы этого. Но я не понимаю, и это мой вопрос: каковы его преимущества?

0 ответов

Другие вопросы по тегам