Подтвердить что ты не робот

Dispatch_async и блок в iOS

Что означает этот кусок кода?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        TMBaseParser *parser=[[TMBaseParser alloc] init];
        parser.delegate=self;
        NSString *post =nil;
        NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
        [parser parseForServiceType:TMServiceCategories postdata:postData];
    });

пожалуйста, объясните это вкратце.

4b9b3361

Ответ 1

Кусок кода в

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

});

выполняется асинхронно в фоновом потоке. Это сделано потому, что анализ данных может занять много времени, и он может заблокировать основной поток, который остановит все анимации, и приложение не будет реагировать.

Если вы хотите узнать больше, прочитайте документацию Apple по Grand Central Dispatch and Dispute Queue.

Ответ 2

Если приведенные выше фрагменты кода не работают, попробуйте следующее:

Objective-C:

dispatch_async(dispatch_get_main_queue(), ^{

});

Обновления пользовательского интерфейса всегда должны выполняться из основной очереди. Символ "^" указывает на начало блока.

Свифт 3:

DispatchQueue.global(qos: .background).async {
    print("This is run on the background queue")

    DispatchQueue.main.async {
        print("This is run on the main queue, after the previous code in outer block")
    }
}

Ответ 3

Это блок Grand Central Dispatch.

  • dispatch_async - это вызов для запуска в другой очереди.
  • dispatch_get_global_queue - это вызов для получения конкретной очереди с требуемыми характеристиками. Например, код может быть запущен с низким приоритетом на DISPATCH_QUEUE_PRIORITY_BACKGORUND.
  • Внутри блока код ничего не делает. Сообщение установлено равным нулю. Затем сообщение отправляется в nil "dataUsingEncoding". Objective C отбрасывает все вызовы на nil. Наконец, синтаксический анализатор отправляется postnata nil.
  • В лучшем случае это ничего не сделает. В худшем случае отправка данных анализатора nil приведет к сбою.