IOS中如何异步加载图片(二)异步加载图片

异步加载图片的原理就是 当网络请求下来的数据中有图片的数据,就把图片的数据提出来 让它自己去通过ImageDownload下载 等下载好了,在把图片传给View去显示。
话不多说 上代码

第一步 :在定义的Model类中 重新声明一个属性 用来显示图片的,在这之前 一定要引入ImageDownload的头文件哦!!!

@property (nonatomic, retain) UIImage *pictureimage;// 用来显示图片的属性

第二步:因为是在MRC下 所以要重写dealloc方法 别忘了!!!

- (void)dealloc
{
    [_movieId release];
    [_movieName release];
    [_pic_url release];
    // 下面是需要release的方法 
    [_pictureimage release];

    [super dealloc];
}

第三步 当外界执行相应的KVC方法(setValuesForKeysWithDictionary)的时候 内部会执行下面的方法 所以我们要重写这个方法 来进行图片异步加载

- (void)setValue:(id)value forKey:(NSString *)key
{
    [super setValue:value forKey:key];

    if ([key isEqualToString:@"pic_url"]) {
    // 使用ImageDownload里面的初始化方法
        ImageDownload *imagedownload = [ImageDownload imageDownloadWithURLStr:value];

        // 这里面的Block方法是要等图片加载完成后执行ImageDownload里面的方法后 才会执行
        __block MovieData *text = self;// 双下划线定义self 是为了防止循环引用

        imagedownload.successBlock = ^(ImageDownload *imageDownload, UIImage *image){
            // 将下载好的图片 赋值给创建的属性
            text.pictureimage = image;
        };

        imagedownload.errorBlock = ^(ImageDownload *imageDownload,NSError *error){
            NSLog(@"error = %@",[error localizedDescription]);
        };
    }
}

第四步 回到ImageDownload.m文件中 图片数据下载完成后 会执行下面的方法

// 将接收到的数据进行拼接
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // 拼接数据
    [self.receiveData appendData:data];
}


// 数据下载成功后 调用外界成功的Block方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    UIImage *image = [UIImage imageWithData:self.receiveData];
    self.successBlock(self,image);
}
// 下载失败后,同样调用外界失败的Block方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    self.errorBlock(self,error);
}

第五步:在View中展示下载好的图片

- (void)configuerDataWithActivity:(MovieData *)movieDate
{
    self.namelabel.text = movieDate.movieName;

    // 异步加载的方式加载图片
    // 将下载好的图片给View中的Label显示出来
    self.imagelabel.image = movieDate.pictureimage;
}

这样 就可以实现异步图片的加载了 但是还有一个问题 就是实际情况中 如果网速比较慢的话 下载好的图片不能显示出来 所以在还不是最完美的版本 ,需要引入KVO观察者
敬请期待。。。

发布了23 篇原创文章 · 获赞 6 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章