前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS异步请求下载图片

iOS异步请求下载图片

原创
作者头像
用户8983410
修改2021-10-29 10:40:40
7950
修改2021-10-29 10:40:40
举报
文章被收录于专栏:代码小技巧分享分析

在iOS中可以这样获取一张网络图片

代码语言:javascript
复制
    NSURL *url = [NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/w%3D2048/sign=91c1063e1f950a7b753549c43ee963d9/f31fbe096b63f624b6a9640b8544ebf81b4ca3c6.jpg"];  
    NSData *data = [[NSData alloc] initWithContentsOfURL:url];  
    UIImage *img = [UIImage imageWithData:data];  

但是图片比较大的时候程序会卡在这里,所以我们要用异步请求来下载图片

1.新建一个single view工程

2.ViewController.h文件:

代码语言:javascript
复制
    @interface ViewController : UIViewController <NSURLConnectionDataDelegate> {  
        NSMutableData* _imageData;//如果图片比较大的话,response会分几次返回相应数据,所以需要用NSMutableData来接受数据  
        float _length;  
    }  
    @end  

3.ViewController.m文件:

代码语言:javascript
复制
    - (void)viewDidLoad

    {

        [super viewDidLoad];

    //初始化图片数据  
    _imageData = [[NSMutableData alloc] init];  

    //请求  
    NSURL *url = [NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/w%3D2048/sign=91c1063e1f950a7b753549c43ee963d9/f31fbe096b63f624b6a9640b8544ebf81b4ca3c6.jpg"];  
    NSURLRequest *request = [NSURLRequest requestWithURL:url];  
    //连接  
    [NSURLConnection connectionWithRequest:request delegate:self];  
}  </pre> 


 4.接受响应头和响应体
    //响应头

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  
{  
    //清空图片数据  
    [_imageData setLength:0];  
    //强制转换  
    NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response;  
    _length = [[resp.allHeaderFields objectForKey:@"Content-Length"] floatValue];  
    //设置状态栏接收数据状态  
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;  
}  

//响应体  
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  
{  
    [_imageData appendData:data];//拼接响应数据  
}  </pre> 


 5.请求完成之后将图片显示出来,并且设置状态栏
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection  
    {  
        UIImage* image = [UIImage imageWithData:_imageData];  
        self.view.backgroundColor = [UIColor colorWithPatternImage:image];  
        //设置状态栏  
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;  
    }   

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档