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观察者
敬请期待。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值