IOS网络访问详解

第一、访问网络的方式

同步请求:数据的请求过程是由主线程发起的,网络加载需要一定的时间,因此会堵塞主线程

异步请求:数据的请求在多线程中完成

同步请求无法取消,异步请求的过程中可以取消,同步请求无法监听加载进度,异步请求可以监听

第二、访问网络的基本流程

构造NSURL实例

生成NSURLRequest请求

通过NSURLConnection发送请求

通过返回NSURLRespond实例和NSErro实例分析结果

接受返回数据

NSURL实例包含了地址信息,如host、scheme、relativePath、port、path

第三、同步请求

    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;

第四、异步请求

5.0以上支持

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;
              });
    }];

5.0一下代码实现:

- (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);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值