IOS中如何异步加载图片(一)封装自己的ImageDownLoad类

异步加载图片是IOS软件开发中经常用到的 下面便是一些具体的步骤与方法 希望可以帮到不懂的同学们 注意:这是在MRC环境下

自己封装一个图片下载的类 方便使用
在ImageDownload.h文件中写入定义与声明

@class ImageDownload;
//定义一个名叫SuccessBlock的block
typedef void(^SuccessBlock)(ImageDownload *imageDownload, UIImage *image);
//定义一个名叫ErrorBlock的block
typedef void(^ErrorBlock)(ImageDownload *imageDownload, NSError *error);


@interface ImageDownload : NSObject
// 定义block为属性的时候 一定要用copy 原因在于 block定义完后 本身是在栈区或者全局区,不在堆区。当定义成属性的时候,需要copy一下 将其拷贝到堆区
@property (nonatomic, copy) SuccessBlock successBlock;
@property (nonatomic, copy) ErrorBlock errorBlock;

// 初始化方法,需要外界提供对应的网址
- (instancetype)initWithURLStr:(NSString *)urlStr;

// 便利构造器方法 方便外界使用
+ (ImageDownload *)imageDownloadWithURLStr:(NSString *)urlStr;
@end

在ImageDownload.m文件中写下对应的实现方法

@interface ImageDownload ()<NSURLConnectionDataDelegate>

@property (nonatomic, retain)NSMutableData *receiveData;// 在延展里面定义一个属性用来存放下载的数据

@end


@implementation ImageDownload

- (void)dealloc
{
    [_receiveData release];
    // 对Block类型的变量进行释放
    Block_release(_successBlock);
    Block_release(_errorBlock);
    [super dealloc];
}

-(NSMutableData *)receiveData
{
    if (_receiveData == nil) {
        self.receiveData = [NSMutableData dataWithCapacity:0];
    }
    return _receiveData;
}



// 初始化方法,需要外界提供对应的网址
- (instancetype)initWithURLStr:(NSString *)urlStr
{
    self = [super init];
    if (self) {
        NSURL *url = [NSURL URLWithString:urlStr];
        NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:15];
        [[[NSURLConnection alloc]initWithRequest:request delegate:self] autorelease];
    }
    return self;
}

// 便利构造器方法 方便外界使用
+ (ImageDownload *)imageDownloadWithURLStr:(NSString *)urlStr
{
    ImageDownload *imageDownload = [[ImageDownload alloc]initWithURLStr:urlStr ];
    return [imageDownload autorelease];

}


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

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    self.errorBlock(self,error);
}


@end

这样 自己封装的ImageDownload类就完成了 给外界提供了便利构造器的接口 可以使用
下面 就要开始我们的异步加载了 敬请期待。。。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值