zoukankan      html  css  js  c++  java
  • 使用KVO体会

    20110625

    学习并使用KVO有段时间了,在之前也简单的介绍了KVO机制,

    这种机制提供了监听某些类属性变化的机制.在MVC中,简单的说,通过监听M的变化,可以及时更新V.因为监听属性明确,当有变化时就直接传递到观察者.

    考虑这样一种情况:请求某网站的rss,并将内容解析出来在tableview中显示出来.因为网络请求以及数据解析需要时间,如果我们把获得的全部数据解析后再显示出来,在用户体验上就会非常不好:用户启动程序后,风火轮可能需要转很久,然后突然就冒出来一大堆的数据.

    改进的方法之一就是使用KVO,当有一条数据解析好后,就解析出来,直到全部数据解析完.具体的实现步骤:

    1. 在controller注册一个属性,通常是NSMutableArray,然后实现KVO的accessory.
    2. 实现KVO的方法--observeValueForKeyPath:ofObject:change:context:,在此方法中我们设置好属性变化时view的变化情况.具体说来,就是当NSMutableArray添加数据,替换或删除数据时的UI更新操作
    3. 当数据有变化时,调用属性相应的方法,来激发KVO机制.

    可是某一天,突然有人问我:为什么需要使用KVO啊,你使用KVO代码量未必会减少,并且更新UI的操作我完全可以在数据有变化时进行”手工”操作啊.

    当时我确实被问到了,可是细细想来KVO还是有不少”好处”的:

    1. 避免了所谓的胶水代码,也就是说我不需要每次在有数据更新的地方都加上UI的更新操作
    2. 你或者说,数据更新的来源单一,我通常只需要在一处实现UI更新即可.那么考虑下,在手机平台上, 通常为了用户体验会将获取数据操作放到后台或次线程中,那么你更新UI操作又必须回到主线程.而使用KVO你就不需要操这些心.
    3. 从程序的结构而言,程序“”分离“”的比价彻底:获取数据的部分和UI更新的部分没有交叠,由KVO将两者联系了起来,这样看来难道不算是优雅吗?

    ps:欢迎大家一起讨论KVO的使用心得.

    Top
  • 相关阅读:
    网页图片垂直剧中 等比例缩放 黑白显示
    vs.net打包(自动检测环境并安装.net framwork)
    22个所见即所得在线Web编辑器
    js验证表单大全3
    js验证表单大全2
    开源界的5大开源许可协议
    ffmpeg参数使用说明2
    ffmpeg参数使用说明1
    js验证表单大全1
    【从零开始学Spring笔记】注解和XML整合开发
  • 原文地址:https://www.cnblogs.com/scorpiozj/p/2090889.html
Copyright © 2011-2022 走看看