在一个新线程中运行HTTP请求值得吗



我在Objective c中制作了一个应用程序,通过HTTP请求从服务器接收和发送数据。它运行良好,但当我连接到学校的互联网时,应用程序会冻结。我觉得wifi太慢了,我想做一个新的线程,抛出一个HTTP请求,并保持线程的活力,直到应用程序完成连接,这样它就不会与主界面冲突。

问题是我不太熟悉线程,我想知道这样做是否值得。

Facebook提供了一个异步的、非阻塞的API来处理HTTP请求。我们希望能够等待HTTP请求返回结果。具体来说,我们正在向Facebook发布一个活动,我们想知道我们刚刚发布的活动的FacebookEventID。

为了做到这一点,我们创建了一个变量"postRequestReturned"并将其设置为false。在post函数中,只要"postRequestRetured"为false,我们就会发送请求,然后阻塞线程。这里需要注意的一点是,一个简单的while循环导致阻塞主线程,使应用程序无法接收来自Facebook的响应。相反,我们在目标c中使用了Runloop库,Runloop是线程进入并用于运行事件处理程序以响应传入事件的循环。一些好的文件

等待代码完成执行

https://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

我们使用的代码片段

while(!postRequestReturned){
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

在Facebook请求的完成处理程序中,我们将postRequestReturned变量设置为true。

礼貌:在obejective-c中等待HTTP请求完成(适用于iOS )

使用异步API的执行web请求调用

[NSURLConnection sendAsynchronousRequest:]

[[NSURLConnection alloc] initWithRequest:m_webRequest delegate:self startImmediately:YES] 

异步调用不会阻塞主线程。

最新更新