zoukankan      html  css  js  c++  java
  • iOS基础 KVC和KVO

    疯狂IOS讲义这本书之前一直一直觉得没什么用,看了做不出像样的程序出来,但是经过几天的学习发现,没有一定的ios基础,做的程序永远都是在模仿他人的程序,把他人的代码复制 粘贴。。。为什么能够实现?原理 是什么?不懂。。。所以 必须懂原理,为什么?

    接下来就今天所学习的内容做一个小结;

    首先介绍一下KVO和KVC,一个是键值编码一个是键值监听,我第一次听这个也是很困惑,这是个神马意思?键值是啥?监听 还懂一点 。。。

    我们都知道之前我们都是通过setter和getter来设置和修改对象的属性,KVC和这种差不多,但是KVC允许字符串形式简介操作对象的属性,全称:Key Value Coding

    ,KVC有2个方法:第一个是:setvalue forKey:   为指定的属性设置值    第二个是   valueForKey: 获取指定属性的值 ,对应setter getter 

    其中对于 setvalue forKey:方法,其底层执行机制如下:

    1. 访问setter

    2. 成员变量 _name

    3. 成员变量 name

    4 valueforUndefinedKey(该方法引发一个异常,导致程序结束)

    当使用KVC方式操作的时候,某些属性可能不一定存在,那么就是自动调用 setvalue :forundefinedKey 和 valueForundefinedKey 方法 ,但是这2个方法默认的引发异常,这时候我们需要重写这2个方法,

    -(void) setValue: (id)  vlaue forindefineKey: (id) key
    {
    NSLog(@"not cunzai",key);
    }
    

     键值监听KVO简单说就是用来更新数据,ios应用程序通常会把组件分为 数据模型组件和视图组件,就是一个是存在内部数据的,一个是用户看到的,一旦数据模型组件发生了改变,那么就需要KVO监听然后对视图的组件更新!

    主要分为三个步骤:

    1.注册

    2.重写  observeValueForKeyPath :ofObject:change:context

    3.删除监听

  • 相关阅读:
    JedisConnectionException: java.net.ConnectException: Connection refused
    启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
    JAVA 判断一个字符串是不是一个合法的日期格式
    升级openssl
    Linux操作路由
    Linux的用户行为审计
    升级gdb
    Linux的运行级别
    sudo的用法
    Linux缓存清理
  • 原文地址:https://www.cnblogs.com/penger/p/4125053.html
Copyright © 2011-2022 走看看