0

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

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

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

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

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

[self performSelectorOnMainThread:withObject:smallerChunk waitUntilDone:FALSE]

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

但是,这是行不通的。至少不可靠。我错过了什么?

4

1 回答 1

0

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

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

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

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

dispatch_async(myQueue, ^{
    /* process data */
});
于 2012-08-26T04:53:42.233 回答