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

时间:2016-01-30 15:52:34

标签: ios sorting search

我正在JSON数据中实施搜索,其中包含HTML格式的数据。

问题是数据非常大。

我必须在图像中显示匹配的颜色搜索:

例如,我搜索了How

enter image description here

我的搜索流程就像那样:

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

第2步: - 从搜索内容中删除Html标签

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

第4步: - 如果找到匹配。用句子打破句子内容           componentSeparatedByString           (因为我必须显示我找到了搜索的句子)

步骤5: - 将句子传递给返回我的函数           归因字符串

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

我正在TextField委托方法shouldChangeCharactersInRange

中执行搜索结果

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

如果键入为快,那么假设我搜索Animal,那么我会搜索ani anim并最后搜索animal

如何加强搜索。

1 个答案:

答案 0 :(得分:1)

我的建议如下:

<强>制备

步骤1和2.不要在每次搜索时重复这些步骤,在开始搜索之前或仅在第一次搜索期间执行一次。

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

搜索

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

重新加载表格以显示结果。不要在这里使用属性字符串。

<强>高亮

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

可能的改进

去抖 - 搜索文本更改后不要立即开始搜索。启动计时器,将在0.1-0.5秒内搜索。如果有更新的搜索文本更新,请取消之前的计时器并开始新计时。这会将多个更新合并为一个更新。

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

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