IOS中如何异步加载图片(一)封装自己的ImageDownLoad类
2015-09-12 14:51
543 查看
异步加载图片是IOS软件开发中经常用到的 下面便是一些具体的步骤与方法 希望可以帮到不懂的同学们 注意:这是在MRC环境下
自己封装一个图片下载的类 方便使用
在ImageDownload.h文件中写入定义与声明
在ImageDownload.m文件中写下对应的实现方法
这样 自己封装的ImageDownload类就完成了 给外界提供了便利构造器的接口 可以使用
下面 就要开始我们的异步加载了 敬请期待。。。
自己封装一个图片下载的类 方便使用
在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类就完成了 给外界提供了便利构造器的接口 可以使用
下面 就要开始我们的异步加载了 敬请期待。。。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- ruby实现的一个异步文件下载HttpServer实例
- C#异步绑定数据实现方法
- upload上传单张图片
- 图片引发的溢出危机(图)
- 科学知识:同步、异步、阻塞和非阻塞区别
- 探讨Ajax中同步与异步之间的区别
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- C#中异步回调函数用法实例