代码如下所示,点击它后我有一个按钮,每4秒激活一次定时器和定时器调用方法。但是,有时4秒不足以让服务器返回数据。但是,如果服务器在1秒内返回数据并且不利于用户等待更长时间,则增加计时器值也不是好的解决方案。在这种情况下,我不知道什么是最佳/最佳解决方案。
-(IBAction)play:(id)sender{
timer=[NSTimer scheculedWith TimerInterval(4.0) target:(self)selector:@selector(httpRequest) userinfo:nil repeats:YES]
}
-(void)httpRequest{
_weak ASIHTTPRequest *request1 = [ASIHTTPRequest requestWithURL:url1];
[request1 setCompletionBlock:^{
NSString *responseString1 = [request1 responseString];
//dispatch_async(backgroundProcess1,^(void){
[self plotOverlay1:responseString1];
//});
}];
[request1 setFailedBlock:^{
NSError *error=[request1 error];
NSLog(@"Error: %@", error.localizedDescription);
}];
[request1 startAsynchronous];
}
答案 0 :(得分:1)
如果您只想连续更新数据,请考虑从第一个请求的完成块中再次调用-httpRequest
(并删除定时器)。这样,您可以放心,请求将再次执行,但只有在第一个请求完成后 - 并且您可以在那里引入延迟,因此您会得到类似“在”先检查结束。“
这可能类似于:
- (void)httpRequest {
__weak ASIHTTPRequest *req = [ASIHTTPRequest requestWithURL:url1];
[req setCompletionBlock:^{
NSString *resp = [req responseString];
[self plotOverlay1:resp];
[self httpRequest];
// or...
[self performSelector:@selector(httpRequest) withObject:nil afterDelay:2.0];
}];
/* snip fail block */
[req startAsynchronous];
}