2014-09-25 83 views
0

我试图写一个使用Swift的HTTP请求,我真的只能看到人们以某种​​方式(实际上没有那么多GCD)在iOS上执行HTTP请求。Swift - Grand Central Dispatch vs Blocks/Closures

如果我想在iOS中发出HTTP请求,最好的方法是什么:使用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() 
     }) 
    }) 

从我在调试会话标签的处理器看,我可以看到它从主题X跳到主题Y(为的authenticateUser)和回到线程X.哪个好 - 这是我想要的(我确定)。

在Swift中编写的GCD或Blocks/Closures的任何很好的例子都是非常方便的。谢谢!

+3

GCD使用闭包。不能在不使用闭包的情况下在Swift中使用GCD。无论如何,你看过[* URL加载系统编程指南*](https://developer.apple.com/library/ios/Documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165i)? – 2014-09-25 21:20:41

+0

看一看:https://medium.com/swift-programming/http-in-swift-693b3a7bf086。 – 2014-09-25 21:28:46

+0

@MaximShoustin比使用GCD或更正确的方式做异步HTTP请求更好吗? – 2014-09-25 21:32:20

回答

1

您可以使用NSURLSession。基本用法就像

NSURLSession.sharedSession().dataTaskWithRequest(request) { data, urlResponse, error in 
    // handle the response 
}.resume() 
+0

这实际上在新线程中处理请求?如果是这样,我是否将完成代码放在您说'//处理响应'的大括号内? – 2014-09-25 21:26:37

+0

它异步发出http请求,然后在主线程上调用closure(处理响应部分)。 – mustafa 2014-09-25 21:29:50

+0

比我在上面的问题中使用GCD代码更好吗?如果是这样,为什么? – 2014-09-25 21:33:19

2

使用NSURLSession发出您的HTTP请求。使用GCD在您的应用中实现并发(多个事件同时发生)。并使用Closures为您的应用程序提供结构。正如你现在所看到的,它们都可以同时使用。顺便提一下,请记住:所有UI修改都必须在主线程中调用,在您的代码中,您在并发队列中调用此self.activityIndicator.startAnimating()

相关问题