ios-网络request请求

1.同步请求
  NSMutableURLRequest*urlrequest=  [[NSMutableURLRequest alloc]init];
  [urlrequest setURL:url];
  [urlrequest setTimeoutInterval:60];
  [urlrequest setHTTPMethod:@"GET"];
  NSURLResponse *response;
  NSData *data= [NSURLConnection sendSynchronousRequest:urlrequest returningResponse:&response error:nil];
  UIImage *image = [UIImage imageWithData:data];
此请求的请求数据是一张图片
2.异步请求
 NSMutableURLRequest*urlrequest=  [[NSMutableURLRequest alloc]init];
    [urlrequest setURL:url];
    [urlrequest setTimeoutInterval:60];
    [urlrequest setHTTPMethod:@"GET"];
    NSOperationQueue *quence=[[NSOperationQueue alloc]init];
    [NSURLConnection sendAsynchronousRequest:urlrequest queue:quence completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
       UIImage *image= [UIImage imageWithData:data];
        dispatch_sync(dispatch_get_main_queue(), ^{//回到主线程上
            self.image=image;
        }); 
    }];
2.2异步请求的另一种方式
-(void) setImageWithURL1:(NSURL *)url{
    NSMutableURLRequest*urlrequest=  [[NSMutableURLRequest alloc]init];
    [urlrequest setURL:url];
    [urlrequest setTimeoutInterval:60];
    [urlrequest setHTTPMethod:@"GET"];
    self.data=[NSMutableData data];//新增的一个属性
    [NSURLConnection connectionWithRequest:urlrequest delegate:self];//异步请求
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [_data appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    UIImage *image=[UIImage imageWithData:_data];
    self.image=image;
}
//上面这2个方法是在主线程中监听的异步请求,所以最后的给UI给值的时候不用调用回到主线程中的那个方法

 

总结:同步请求是在主线程中进行,异步是在多线程中进行,当然也可以在多开的线程中进行同步请求一个道理

14年5月3号:异步请求一定是不在这个线程上,同步请求可以在这个线程上也可以不在这个线程上,比如开始一个线程在上面执行一个同步请求就达到来异步的效果。(md,突然写时间的时候,想着,如果n年后,n>20,看到这个笔记是个什么样的心得呢,20年后我的,你好,你儿子是叫李威仔吗,女儿是叫李薇薇吗)

posted @ 2014-04-13 19:56  离子  阅读(638)  评论(0编辑  收藏  举报