当前位置:编程学习 > wap >>

IOS网络访问详解

第一、访问网络的方式
 
同步请求:数据的请求过程是由主线程发起的,网络加载需要一定的时间,因此会堵塞主线程
 
异步请求:数据的请求在多线程中完成
 
同步请求无法取消,异步请求的过程中可以取消,同步请求无法监听加载进度,异步请求可以监听
 
第二、访问网络的基本流程
 
构造NSURL实例
 
生成NSURLRequest请求
 
通过NSURLConnection发送请求
 
通过返回NSURLRespond实例和NSErro实例分析结果
 
接受返回数据
 
NSURL实例包含了地址信息,如host、scheme、relativePath、port、path
 
第三、同步请求
 
[objc]  
<span style="font-size:18px">    NSMutableURLRequest *request=[[NSMutableURLRequest alloc] init];  
    [request setHTTPMethod:@"GET"];  
    [request setURL:url];  
    [request setTimeoutInterval:60];  
      
    NSURLResponse *response;  
    NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];  
    UIImage *image=[UIImage imageWithData:data];  
    self.image=image;  
</span>  
 
第四、异步请求
5.0以上支持
 
[objc] view plaincopyprint?
<span style="font-size:18px">NSMutableURLRequest *request=[[NSMutableURLRequest alloc] init];  
    [request setHTTPMethod:@"GET"];  
    [request setURL:url];  
    [request setTimeoutInterval:60];  
      
    NSOperationQueue *queue=[[NSOperationQueue alloc] init];  
    [NSURLConnection sendAsynchronousRequest:request queue: queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {  
        UIImage *image=[UIImage imageWithData:data];  
              dispatch_sync(dispatch_get_main_queue(), ^{  
                  self.image=image;  
              });  
    }];  
</span>  
 
5.0一下代码实现:
[objc] 
<span style="font-size:18px">- (void)setURL:(NSURL *)url {  
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];  
    //设置请求方式  
    [request setHTTPMethod:@"GET"];  
      
    [request setURL:url];  
    //设置超时时间  
    [request setTimeoutInterval:60];  
  
    self.data = [NSMutableData data];  
    //发送一个异步请求  
    [NSURLConnection connectionWithRequest:request delegate:self];  
}  
  
#pragma mark - NSURLConnection delegate  
//数据加载过程中调用  
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {  
    [self.data appendData:data];  
}  
  
//数据加载完成后调用  
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {  
    UIImage *image = [UIImage imageWithData:self.data];  
    self.image = image;  
}  
  
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {  
    NSLog(@"请求网络失败:%@",error);  
}  
  
</span>  
 

补充:移动开发 , IOS ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,