说我想实现一些快速搜索。用户输入一些字母,并且每次字母更改时,我的程序将搜索网络以提供搜索建议。
但是,我不希望这个函数被调用的频率超过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)
将其设置为当计时器到期时,执行搜索,但每当用户输入字符时,将计时器重置为延迟量。