NSRunLoop与NSURLConnection和键盘输入有关

时间:2014-04-20 10:46:50

标签: ios objective-c nsurlconnection nsrunloop

我有一个NSURLConnection,它执行为我上传图像的任务。这是我初始化和启动此连接的方式:

_connection = [[NSURLConnection alloc]
                initWithRequest:request
                       delegate:self 
                startImmediately:NO];

[_connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
                        orMode:NSDefaultRunLoopMode]; 
[_connection start];

我实际上是在其自己的dispatch_queue上使用dispatch_async从其他地方调用此方法。 问题是当图像上传并且我开始用键盘输入我的应用程序时,有时会冻结应用程序。 经过一番挖掘后,我开始明白mainRunLoop实际上是处理键盘按钮按下等输入请求。我想知道我是否正确,这实际上是导致我的问题,这冻结了我的应用程序。 非常感谢有关此问题的任何帮助。 提前谢谢。

P.S:我尝试在currentRunLoop上运行我的连接,但除非我手动启动currentRunLoop,否则它不起作用。

1 个答案:

答案 0 :(得分:0)

异步NSURLConnection意味着在runloop中运行。所以你有两个选择:使用主线程/主runloop或产生另一个线程并在那里启动一个单独的runloop。在后一种情况下,您需要使用[NSRunLoop currentRunLoop]代替[NSRunLoop mainRunLoop]

我建议去主线程/主要的runloop。异步NSURLConnection是非常有效的,在主线程上运行很多它们都没问题。除非你在委托方法中做了非常昂贵的事情,否则你不会注意到任何性能问题。

所以只需在主线程上运行代码,一切都应该没问题。