图片异步加载 ,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"];

    }

    

}

 

 

 

转载于:https://www.cnblogs.com/haiying/p/4107083.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值