我有一个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,否则它不起作用。
答案 0 :(得分:0)
异步NSURLConnection意味着在runloop中运行。所以你有两个选择:使用主线程/主runloop或产生另一个线程并在那里启动一个单独的runloop。在后一种情况下,您需要使用[NSRunLoop currentRunLoop]
代替[NSRunLoop mainRunLoop]
。
我建议去主线程/主要的runloop。异步NSURLConnection是非常有效的,在主线程上运行很多它们都没问题。除非你在委托方法中做了非常昂贵的事情,否则你不会注意到任何性能问题。
所以只需在主线程上运行代码,一切都应该没问题。