Правильно ли это использование блока завершения очереди операций?

Я впервые использую блоки Objective-C и очереди операций. Я' m загружает некоторые удаленные данные, в то время как в основном пользовательском интерфейсе отображается счетчик. Я использую блок завершения, чтобы сообщить таблице о необходимости перезагрузки данных. Как упоминается в документации , блок завершения не выполняется в основном потоке, поэтому таблица перезагружает данные, но не перерисовывает представление, пока вы не сделаете что-нибудь в основном потоке, например, перетащите таблицу.

Решение, которое я сейчас использую, - это очередь отправки. Является ли это «лучшим» способом обновления пользовательского интерфейса из блока завершения?

    // define our block that will execute when the task is finished
    void (^jobFinished)(void) = ^{
        // We need the view to be reloaded by the main thread
        dispatch_async(dispatch_get_main_queue(),^{
            [self.tableView reloadData];
        });
    };

    // create the async job
    NSBlockOperation *job = [NSBlockOperation blockOperationWithBlock:getTasks];
    [job setCompletionBlock:jobFinished];

    // put it in the queue for execution
    [_jobQueue addOperation:job];

Обновление

for ($i=0; $i -lt $total; $i++)

Я что-то упускаю? Они функционально эквивалентны и оба будут проходить через каждый элемент в массиве. Лично я считаю, что вторая версия чище. Есть ли лучший метод или что-то такое, что вам следует использовать первый?

5
задан thomasb 5 September 2014 в 17:20
поделиться