2014-09-25 3 views
0

Я пытаюсь написать HTTP-запрос с помощью Swift, и я действительно вижу, как люди идут так или иначе (на самом деле не так много GCD), чтобы делать HTTP-запросы на iOS.Swift - Grand Central Dispatch vs Blocks/Closures

Если я хочу сделать HTTP-запрос в iOS, что бы это было лучше всего: используйте Grand Central Dispatch или напишите блок блокировки? Кроме того, где можно найти отличные примеры. Из того, что я читал в Интернете, мне трудно видеть преимущества одного над другим.

На данный момент, у меня есть этот код:

let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT 

    dispatch_async(dispatch_get_global_queue(priority, 0), {()->() in 

     self.activityIndicator.startAnimating() 
     self.authenticateUser() 

     dispatch_async(dispatch_get_main_queue(), { 
      self.activityIndicator.stopAnimating() 
     }) 
    }) 

Из того, что я вижу на вкладке Debug Session для процессора, я могу видеть, что прыгать с темы X в теме Y (для authenticateUser) и обратно к Thread X. Что хорошо - это то, что я хочу (я уверен).

Любые хорошие примеры GCD или блоков/замков, написанные в Swift, о которых вы могли бы знать, были бы очень удобными. Благодаря!

+3

GCD использует затворы. Вы не можете использовать GCD в Swift без использования закрытий. В любом случае, посмотрели ли вы [* Руководство по программированию системы загрузки URL *) (https://developer.apple.com/library/ios/Documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165i)? –

+0

Взгляните: https://medium.com/swift-programming/http-in-swift-693b3a7bf086. –

+0

@MaximShoustin это лучше, чем использование GCD или более «правильный путь» для выполнения асинхронных HTTP-запросов? –

ответ

1

Вы можете использовать NSURLSession. Основное использование - это

+0

Это действительно обрабатывает запрос в новом потоке? Если да, поместим ли код завершения в фигурные скобки, где вы говорите «// обрабатываете ответ»? –

+0

он асинхронно обрабатывает HTTP-запрос, а затем вызывает закрытие (обрабатывает часть ответа) в основном потоке. – mustafa

+0

это лучше, чем использование кода GCD, который у меня есть в моем вопросе выше? Если да, то почему? –

2

Используйте NSURLSession, чтобы сделать свой HTTP-запрос. Используйте GCD для реализации параллелизма в вашем приложении (одновременно происходит несколько вещей). И используйте Closures, чтобы придать структуру вашему приложению. Как вы можете видеть сейчас, все они могут использоваться одновременно.

Кстати, всегда помните об этом: Все модификации пользовательского интерфейса должны вызываться в основном потоке, в вашем коде вы вызываете это self.activityIndicator.startAnimating() в параллельной очереди.

Смежные вопросы