假设我想实现一些快速搜索。用户输入一些字母,每次字母更改时,我的程序都会搜索网络以提供搜索建议。
但是,我不希望该函数的调用频率超过 3 秒。
我该怎么做?
我目前使用计时器。此外,自动完成的“搜索”网络将在后台完成,因此会出现一些多线程问题。
我会尽快发布代码。但大多数答案与我的相似。
哦,复杂的是,如果用户输入得太快,抓取仍应在 3 秒后完成。所以不是马上,但仍然可以完成。
假设我想实现一些快速搜索。用户输入一些字母,每次字母更改时,我的程序都会搜索网络以提供搜索建议。
但是,我不希望该函数的调用频率超过 3 秒。
我该怎么做?
我目前使用计时器。此外,自动完成的“搜索”网络将在后台完成,因此会出现一些多线程问题。
我会尽快发布代码。但大多数答案与我的相似。
哦,复杂的是,如果用户输入得太快,抓取仍应在 3 秒后完成。所以不是马上,但仍然可以完成。
当您检测到新字母时,只需检查已经过去了多少时间:
NSDate *d = [NSDate date];
if( lastSearch == nil || [d timeIntervalSinceDate:lastSearch] > 3 )
{
lastSearch = d;
// Do your search ...
}
lastSearch
在您的 .h 文件中声明如下:
NSDate *lastSearch;
您可以创建计时器并检查搜索字符串的更新。喜欢
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
}
}
只是不要忘记在不需要时使计时器失效
设置它,以便在您的计时器到期时执行搜索,但每当用户输入字符时,将计时器重置为延迟量。