zoukankan      html  css  js  c++  java
  • Delegate,Block,Notification, KVC,KVO,Target-Action

    Target-Action:

    目标-动作机制,所有的UIControl及子类都是这个机制;
    原理:在对象产生某个事件的特定时刻,给一个对象发送一个消息;类内部target去执行action方法

    Delegate: 

    iOS2.0以后出现,delegate配合protocol,delegate 是一对一的关系,修饰符使用weak, 当

    Block:

    iOS4.0以后出现,一对一


    Notification:

    一对多, 


    KVC:

    键值编码,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。

    KVC的常用方法:

    赋值:

    - (void)setValue:(nullable id)value forKey:(NSString *)key;
    - (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
    
    // 注解:
    setValue:(属性值) forKey:(属性名),(用于简单属性)。
    setValue:(属性值) forKeyPath:(属性名),(用于复合属性,进行内部的点语法,层层访问内部的属性; 例如student.name,Student学生模型类中的name属性。

    取值:

    - (id)valueForKey:(NSString *)key;
    - (nullable id)valueForKeyPath:(NSString *)keyPath;
    
    // 注解:
    valueForKey:属性名
    valueForKeyPath:属性名(用于复合属性)

     实现原理:

    • 1.首先去模型中查找有没有 setName,若有,直接调用赋值 [self setName:@"白开水ln简书"]
    • 2.若无,去模型中查找有没有 name 属性,若有,直接访问属性赋值 name = value
    • 3.若无,再去模型中查找有没有 _name 成员变量,若有,直接访问属性赋值 _name = value
    • 4.找不到,就会直接报找不到的错误(valueForUndefinedKey:


    KVO:

    键值观察
    KVO常用方法

    [self addObserver: forKeyPath: options: context:]
        
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
    }
    
    [self removeObserver: forKeyPath:]



     

  • 相关阅读:
    git小乌龟的使用
    C语言笔记(二):数据类型(基本数据类型)、类型转换(自动转换、强制转换)
    Edge Chromium 中如何始终允许运行 Flash 内容
    【DTOJ】2704:数字互换
    【DTOJ】2703:两个数的余数和商
    【DTOJ】1001:长方形周长和面积
    Linux_simpl shell-利用Shell脚本for循环输出系统中的用户及其Shell
    Linux_Centos7安装VNC实现远程桌面
    Linux_crontab参数表示的意思
    Docke部署nginx并配置nginx
  • 原文地址:https://www.cnblogs.com/shidaying/p/6926993.html
Copyright © 2011-2022 走看看