图片下载-同步/异步(delegate和block)
来源:互联网 发布:路由器mac地址有什么用 编辑:程序博客网 时间:2024/05/21 17:15
1、创建一个继承自NSObject的类
2、定义一个类方法实现图片的下载
主要代码如下:
.h文件中:
#import <Foundation/Foundation.h>
#pramag ----------要引入该文件
#import <UIKit/UIKit.h>
//方法一:使用协议异步下载图片:
#pragma mark============声明协议
@protocol ZQImageDownLoaderDelegate <NSObject>
-(void)imageDownLoaderDownLoadImage:(UIImage *)image;
@end
//方法二:block方法异步下载图片
//起别名
typedef void(^imageDownLoaderBlock)(UIImage *);
/*@protocol ZQImageDownLoaderDelegate<NSObject>
-(void)imageDownLoader:(UIImage *)iamge;
@end
*/
@interface ZQImageDownLoader : NSObject
//同步下载
+(UIImage *)imageDownloaderDownLoadImageWithImageURLString:(NSString *)imageURL;
//异步下载(代理方法)
+(void)imageDownloaderDownLoadImageWithImageURLStringByAsynchronization:(NSString *)imageURL delegate:(id<ZQImageDownLoaderDelegate>)delegate;
//异步下载(BLOCk方法)
+(void)iamgeDownLoad:(NSString *)urlString block:(imageDownLoaderBlock)block;
.m文件中
@implementation ZQImageDownLoader
//同步下载
+(UIImage *)imageDownloaderDownLoadImageWithImageURLString:(NSString *)imageURL
{
//根据传进来的网址字符串创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]];
//使用data对象接收同步请求的图片数据
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//返回请求后的图片对象
return [UIImage imageWithData:data];
}
////异步下载
+(void)imageDownloaderDownLoadImageWithImageURLStringByAsynchronization:(NSString *)imageURL delegate:(id<ZQImageDownLoaderDelegate>)delegate
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
UIImage *image = [UIImage imageWithData:data];
//代理对象执行此方法
//如果代理对象不为空,且实现了代理方法(传递值)
if(delegate && [delegate respondsToSelector:@selector(imageDownLoaderDownLoadImage:)]){
//则代理执行此方法
[delegate imageDownLoaderDownLoadImage:image];
}
}];
}
//异步下载(BLOCk方法)
+(void)iamgeDownLoad:(NSString *)urlString block:(imageDownLoaderBlock)block
{
//根据图片网址字符串创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
//异步下载图片
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//根据data对象创建图片对象
UIImage *image = [UIImage imageWithData:data];
//block传递值
block(image);
}];
}
//在视图控制器中调用这三种方法
#pragma mark================图片封装
- (IBAction)DownLoadImage:(UIButton *)sender
{
// 同步下载
// _iamgeView.image = [ZQImageDownLoader imageDownloaderDownLoadImageWithImageURLString:IMAGE_URL2];
// //异步下载(代理传值)
// [ZQImageDownLoader imageDownloaderDownLoadImageWithURLString:IMAGE_URL2 delegate:self];
//异步下载(block传值)
[ZQImageDownLoader iamgeDownLoad:IMAGE_URL1 block:^(UIImage *image){
_iamgeView.image = image;
}];
}
//实现协议方法
//-(void)imageDownLoaderDownLoadImage:(UIImage *)image
//{
// _iamgeView.image = image;
//}
- 图片下载-同步/异步(delegate和block)
- 网络编程-GET-同步和异步(delegate和block)
- 网络编程-POST同步和异步(block和delegate)
- 图片下载--同步,异步
- oc 同步、异步图片下载
- iOS个人封装图片下载:Block与Delegate两种方式
- NSNotification、KVO、Delegate的同步和异步问题
- [ios] delegate, selector和block
- delegate 和 block 的区别
- 何时使用block和Delegate?
- delegate、block和NSNotification传值
- delegate和block的选择
- block和delegate的使用
- delegate和block如何选择
- block和delegate如何选择
- block和delegate修饰符:
- KVO和异步图片下载的结合使用
- Delegate & Block
- ASP.NET MVC + Bootstrap + XML + WCF 封装短信验证服务(一)
- 动态变量和静态变量的区别
- 自己的练习四之对象与数组的组合
- iOS 转场动画等
- Ubuntu14.04安装CUDA6.5
- 图片下载-同步/异步(delegate和block)
- 网络故障之DHCP广播风暴------运维上看交换机的CPU占用率100%
- 在Eclipse中用JDBC连接mysql的问题
- 一个JavaScript实现的贷款计算器
- URAL 1348 Goat in the Garden 2(点到线段的距离)
- UVALive 4854 A Digital Satire of Digital Age
- OJ的搭建
- 使用Spring的@Scheduled实现定时任务
- SimpleAdapter 支持的组件