处理异步NSURLConnection接收数据时挂起绘图



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

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

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

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

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

[self performSelectorOnMainThread:withObject:smallerChunk waitUntilDone:FALSE]

其想法是,它将一堆事件放在运行循环上,并尽可能地处理scrollRangeToVisible。

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

"然而,这不起作用。至少不可靠。"是一个相当模糊的错误描述。但是,我建议您在后台线程中处理从连接接收到的数据,这样它就不会阻塞主线程。

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

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

并且在CCD_ 1中向该队列提交对数据的处理:

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

最新更新