Timer vs ASIHTTPRequest - 找到最佳解决方案

时间:2012-09-24 22:46:36

标签: ios asihttprequest nstimer

代码如下所示,点击它后我有一个按钮,每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];
    }

1 个答案:

答案 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];
}