-3

假设我想实现一些快速搜索。用户输入一些字母,每次字母更改时,我的程序都会搜索网络以提供搜索建议。

但是,我不希望该函数的调用频率超过 3 秒。

我该怎么做?

我目前使用计时器。此外,自动完成的“搜索”网络将在后台完成,因此会出现一些多线程问题。

我会尽快发布代码。但大多数答案与我的相似。

哦,复杂的是,如果用户输入得太快,抓取仍应在 3 秒后完成。所以不是马上,但仍然可以完成。

4

3 回答 3

2

当您检测到新字母时,只需检查已经过去了多少时间:

NSDate *d = [NSDate date];

if( lastSearch == nil || [d timeIntervalSinceDate:lastSearch] > 3 )
{
    lastSearch = d;

    // Do your search ...

}

lastSearch在您的 .h 文件中声明如下:

NSDate *lastSearch;
于 2012-06-03T10:39:09.417 回答
1

您可以创建计时器并检查搜索字符串的更新。喜欢

timer = [NSTimer timerWithTimeInterval:3.f target:self selector:@selector(update) userInfo:nil repeats:YES];

然后只需执行更新方法

-(void) update
{
    BOOL needToSearch = // check if there was changes in your search string
    if ( needToSearch )
    {
        // make new search
    }
}

只是不要忘记在不需要时使计时器失效

于 2012-06-03T10:48:55.080 回答
0

设置它,以便在您的计时器到期时执行搜索,但每当用户输入字符时,将计时器重置为延迟量。

于 2012-06-07T17:31:10.750 回答