您的位置:首页 > 产品设计 > UI/UE

UI 17 异步加载图片 KVO

2015-12-05 19:26 447 查看
真实开发中,网络接口返回的JSON或XML数据中,通常不包含图片,而是给出图片的URL.因此需要根据图片URL获取图片数据

因为HTTP协议是超文本传输协议,所以可以传输图片.

图片下载是IOS开发中常用的功能,但系统并未提供图片下载类.为了便于后续的使用,可以将图片下载封装到一个类里面(ImageDownLoader)

ImageDownLoader允许外界指定URL,提供开始下载和取消下载功能,并提供delegate或block将图片传递给外界. 注:这里之所以要用到delegate或者block进行传递. 而不是直接写一个属性,或者方法传值,是因为只有在加载方法里面data也有值,出来后就没有了.所以不行.

在完成请求里面调用请求成功方法

在请求失败里面调用请求失败方法

这里将设置代理人放在了ImageDownLoader的初始化里面.方法如下:

- (instancetype)initWithUrl:(NSString *)url delegate:(id)delegate

KVO (Key-Value-Observer)键值观察者,是观察者设计模式的一种具体实现.

KVO触发机制: 一个对象(观察者),监测另一对象(被观察者)的某属性是否发生变化,若被监测的属性发生的更改,会触发观察者的一个方法(方法名固定,类似代理方法)

KVO使用步骤:

1.注册观察者 (为被观察者指定观察者以及被观察属性)

2.实现方法

3.触发方法(被观察属性发生更改时触发)

4.移除观察者

[self.wl addObserver:self forKeyPath:@”money” options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@”haha”];

self.wl 被观察者 self 观察者

@“money” 被观察属性 NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld 旧的属性值,新的属性值

@“haha” 携带的参数 (void *)类型 即任意类型

一般一个观察者观察一个属性 但是都会触发这个方法,所以需要你判断一下 可携带参数可能需要用

UITableView显示图片

为了能正确的显示图片,Model类应该提供图片获取功能(Model通过ImageDownloader下载图片,供cell使用).

Model类注意事项:

1.除了包含必要的数据外,还要包含一个ImageDownloader对象

2.包含一个image.

3.包含一个图片是否正在下载的BOOL值.(用于判断是否需要开始加载)

tableView:cellForRowAtIndexPath:会在重⽤的时候,根据Model显 ⽰image或者placeholderImage。

更新图片的时机 在返回cell的方法进行 共有两种情况: 1.请求失败,重写加载图片 这其中用到了观察者 可以用change[@“new”]取出改变的图片 2.图片已经加载好了. 那么直接赋值就可以了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: