2016-04-04 3 views
0

Я проверял это code, когда я наткнулся на использование dispatch_async как:dispatch_async преимущество использования

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.photosArray removeAllObjects]; 
    [[self mutableArrayValueForKeyPath:@"photosArray"] addObjectsFromArray:photos]; 
}); 

Если я не ошибаюсь, эта строка кода равна:

[self.photosArray removeAllObjects]; 
[[self mutableArrayValueForKeyPath:@"photosArray"] addObjectsFromArray:photos]; 

I я смущен, почему разработчик решил использовать dispatch_async в этом случае. Также, пожалуйста, поправьте меня, если я ошибаюсь.

+1

Почему, на ваш взгляд, равные? Не думаете ли вы, что использование 'dispatch_async' (в главной очереди) должно что-то сделать? – rmaddy

+0

@rmaddy я согласен, но смущен относительно того, какая разница. – Singh

+0

Лучше спросить автора этого кода о причине написано. Я вижу, по крайней мере, один пункт, чтобы использовать 'dispatch_async' здесь: для синхронизации измененных изменений массива. –

ответ

0

Эти два фрагмента кода не равны вообще. Итак, что делает dispatch_async в вашем случае?

  1. Если он вызывается из фоновой нити, он запускает свой блок по основному потоку и позволяет вызывающему потоку продолжать свою деятельность, не дожидаясь основного потока.
  2. Если он вызывается из основного потока, он запускает свой блок в основном потоке, но не мгновенно, немного позже, на следующей итерации цикла запуска, поэтому вызывающий код будет выполнен, и только тогда блок будет выполнен а также
Смежные вопросы