繁体   English   中英

如何在Objective-C中最小化搜索时间

[英]How to minimise the search time in Objective-C

我正在以JSON数据实现搜索,该数据包含HTML格式的数据。

问题在于数据非常大。

而且我必须以颜色显示匹配的搜索,如图像所示:

例如,我搜索了How

在此处输入图片说明

我的搜索流程如下:

步骤1:-检查数据是否存在

步骤2:-从搜索内容中剥离HTML标签

步骤3:-使用NSRange rangeOfString选项在内容中执行搜索

步骤4:-如果找到匹配项。 使用componentSeparatedByString打破句子中的内容(因为我必须显示在其中找到搜索内容的句子)

第5步:-通过函数中的句子,这使我返回
属性字符串

步骤6:-在数组中添加结果并重新加载表

我在TextField Delegate方法shouldChangeCharactersInRange执行搜索结果

问题是我的桌子延迟了1到2秒。

如果输入快速,那么假设我搜索Animal然后搜索ani anim和最后一个animal

我该如何加强搜寻。

我的建议如下:

制备

第1步和第2步。不要为每个搜索重复它们,在开始搜索之前或仅在第一次搜索过程中重复一次。

附加步骤:将文本拆分为句子。 您将有一个NSArray句子作为输入。

搜索

使用搜索文本来构建NSPredicate (例如, contains[cd] )。 使用该谓词过滤输入数组。 那应该很快。

重新加载表格以显示结果。 在这里不必理会属性字符串。

突出

显示单元格时,使用当前搜索文本突出显示(生成属性字符串)。 您将只突出显示实际显示的内容,因此应该很快。

可能的改进

防弹跳-搜索文字更改后,请勿立即开始搜索。 启动一个计时器,它将在0.1-0.5秒内进行搜索。 如果很快有新的搜索文本更新,请取消以前的计时器并开始新的计时器。 这会将多个更新合并为一个更新。

使用先前的搜索结果-如果先前的搜索文本是新搜索文本的子字符串,则您只能搜索先前的结果,即搜索的数据较少。

如果搜索仍然太慢(如果您确实有大量文本),请在其他调度队列中执行搜索,并显示活动指示器,直到结果完成为止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM