图片下载-同步/异步(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;
//}



0 0