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

        }

        

    }

     

     

     

  • 相关阅读:
    FILTER(过滤器)
    HDFS优缺点
    python运算符
    python变量类型
    python变量存储
    python编码问题
    【一:定义】python 简介
    如何学一门新技术
    Django安装
    redis 安装及启动关闭
  • 原文地址:https://www.cnblogs.com/haiying/p/4107083.html
Copyright © 2020-2023  润新知