zoukankan      html  css  js  c++  java
  • 图片异步加载 ,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"];

        }

        

    }

     

     

     

  • 相关阅读:
    sql分页 sql server,oracle,db2,mysql
    部分SQL优化
    javascript &&和||的其他用法
    socket 套接字
    网络协议篇
    异常处理
    元类type 反射 函数与方法 双下方法
    私有 实例方法 类方法 静态方法 属性 issubclass isinstance区别
    面向对象的三大特性 鸭子类型 类的约束 super的深度剖析
    继承
  • 原文地址:https://www.cnblogs.com/haiying/p/4107083.html
Copyright © 2011-2022 走看看