如何做,但不是每3秒钟做一次

时间:2012-06-03 10:25:29

标签: objective-c xcode4.3

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

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

我该怎么做?

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

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

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

3 个答案:

答案 0 :(得分:2)

当您检测到新信件时,只需检查已经过了多长时间:

NSDate *d = [NSDate date];

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

    // Do your search ...

}

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

NSDate *lastSearch;

答案 1 :(得分:1)

您可以创建计时器并检查搜索字符串的更新。像Smth一样

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
    }
}

当你不需要它时,不要忘记使你的计时器失效

答案 2 :(得分:0)

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