图片异步加载 ,KVO

图片异步下载类目:

.h

#import <UIKit/UIKit.h>

typedef void (^ImageBlock)(UIImage *img);

@interface UIImage (ImageDown)

 

//第一个参数获得一个url的字符串(图片)

//第二参数 block块是用来将解析出来的image进行第二次赋值

+(UIImage *)imageDownWithUrlString:(NSString *)urlString imageBlock:(ImageBlock)ib;

@end

 

.m

#import "UIImage+ImageDown.h"

 

@implementation UIImage (ImageDown)

 

//实现方法

+(UIImage *)imageDownWithUrlString:(NSString *)urlString imageBlock:(ImageBlock)ib

{

    //使用传进来的url字符串转成NSURL

    NSURL *url=[NSURL URLWithString:urlString];

    

    //准备请求数据

    NSURLRequest *request=[NSURLRequest requestWithURL:url];

    

    //建立连接(get异步请求数据)

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

       

        //解析图片,使用解析好的data转换UIImage

        UIImage *image=[UIImage imageWithData:data];

          //第二次赋值时调用block,并将解析好的image作为参数传入

        ib(image);

    }];

    //因为异步请求线程慢于主线程,提前返回一个占位图片

    return  [UIImage imageNamed:@"5.jpg"];

}

@end

 

************************************

KVO

观察者

- (void)viewDidLoad

{

    [super viewDidLoad];

    

    [[shearSingleModel shearModel] weaking];

    

    //对shearSingleModel的实例进行KVO(键值观察),观察imageArray的值是否发生变化

    //一旦发生变化,更新tableVIew

    

    [[shearSingleModel shearModel]addObserver:self forKeyPath:@"imageArray" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

}

//观察者观察到数据发生变化之后,执行该方法

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

    //判断到底是观察者观察到的哪个值发生了改变

    if ([keyPath isEqualToString:@"imageArray"]) {

        [self.tableView reloadData];

        //移除观察者

        [[shearSingleModel shearModel]removeObserver:self forKeyPath:@"imageArray"];

    }

    

}

 

 

 

你可能感兴趣的:(异步加载)