当用户多次等待下载时生成相同的操作时该怎么办?

use*_*951 5 multithreading web-services objective-c

我正在设计一个IPhone应用程序.用户搜索的东西.我们从网上获取数据.然后我们更新表格.

伪代码就是

[DoThisAtbackground ^{
  LoadData ();
  [DoThisAtForeground ^{
    UpdateTableAndView();
  }];
}];
Run Code Online (Sandbox Code Playgroud)

如果在第一次搜索完成之前用户搜索其他内容呢?

解决这个问题的行业标准方法是什么?

  1. 跟踪哪个线程仍在运行,只在所有线程完成后更新表?
  2. 每次线程完成后更新视图?

我们究竟是怎么做到的?

Fro*_*rog 2

我建议你看一下iOS 人机界面指南。Apple 认为所有应用程序的行为方式大致相同非常重要,因此他们编写了有关此类问题的详细文档。

\n\n

指南中有两件事与您的问题相关:

\n\n
    \n
  • 使搜索快速且有益:“如果可能的话,在用户键入时过滤远程数据。虽然过滤用户的键入可以带来更好的搜索体验,但请务必通知他们,并在响应时间过长时给他们一个选择退出的机会。”可能会延迟结果一两秒以上。”
  • \n
  • 反馈:“反馈确认人们\xe2\x80\x99的操作,并向他们保证处理正在进行。人们在操作控件时期望立即得到反馈,并且在长时间操作期间欣赏状态更新。”
  • \n
\n\n

虽然这些指导方针当然有很多废话,但我认为上述几点实际上是一个值得遵循的好主意。作为用户,我期望搜索时会发生一些事情,并且当每次线程完成时更新视图时,用户将看到最快的响应。是的,这可能是用户不想要的结果,但有些事情正在发生!例如,以 iOS 中的 Safari 网络浏览器为例:即使您正在打字,Google 自动完成功能也会显示结果,而不仅仅是在您完成输入搜索查询时。

\n\n

所以我认为最好选择第二个选择。

\n