处理异步时绘图暂停NSURLConnection接收数据

时间:2012-08-26 04:29:00

标签: ios drawing nsurlconnection nsthread nsurlconnectiondelegate

我正在从服务器加载数据并异步处理响应。使用NSURLConnection。每次调用委托,connection:didReceiveData:正在处理该块。

然而,在收到大量数据之前,我请求一个文本视图滚动到一个新行,即[textView scrollRangeToVisible:]。

问题在于,通常,textView不会滚动,直到收到所有数据。这可能需要一段时间,并使UI看起来很挂。

为了解决这个问题,我认为主线程被锁定处理数据,所以我应该把它分解成更小的块。

所以我改为代码来分解连接中收到的数据:didReceiveData执行较小的操作,并使用

对它们进行排队
[self performSelectorOnMainThread:withObject:smallerChunk waitUntilDone:FALSE]

这个想法是它在runloop上放了一堆事件,并且会尽可能地处理scrollRangeToVisible。

然而这不起作用。至少不可靠。 我错过了什么?

1 个答案:

答案 0 :(得分:0)

“然而这不起作用。至少不可靠。”是一个非常模糊的错误描述。但是,我建议您在后台线程中处理从连接接收的数据,以便它不会阻塞主线程。

您可以创建一个串行调度队列:

dispatch_queue_t myQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_SERIAL);

并在connection:didReceiveData:中将数据处理提交到该队列:

dispatch_async(myQueue, ^{
    /* process data */
});