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年后我的,你好,你儿子是叫李威仔吗,女儿是叫李薇薇吗)