数据传递

KVO和KVC

KVO,一种观察者的机制,通过对某个对象的某个属性添加观察者,当该属性改变,就会调用"observeValueForKeyPath:"方法。

KVC,key value coding , 键值编码,提供一种机制来间接访问对象的属性。基于KVO技术来实现的

KVO 实现原理-runtime -派生类-重写setter

1.kvo是基于runtime机制实现的

2.当某个类的属性对象第一次被观察室,系统自动创建一个该类派生类,在派生类中重写被观察属性的setter方法.在setter方法内部实现真正的键值观察通知机制,

KVO具体实现方法

1)在对象的属性第一次被观察时.系统会将isa指针指向其重写setting的派生类,

2)键值观察通知依赖于NSObject的两个方法willchangevalueforkey 和didchangeValueforKey .willchange在被观察属性发生改变前调用,didchange在发生变化后调用,随后observeValueForKey被调用

image

在重写的setting需要完成三个操作willchange -> setvalue -> didchange

  • 使用属性赋值self.a =.A会调用setter方法会使KVO生效,
  • 使用setValue:forKey也可以使KVO也会生效,因为KVC会去调用setter方法
  • 给属性所对应的变量赋值不会触发setter方法,所以此时的kvo是不会生效的。

消息

oc中,可以用一个类调用它的某一个方法,而这个方法就是消息, 调用方法就是给类发送了一条消息

消息绑定

oc的消息是动态绑定的,也就是说在运行期才能确定调用函数

JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。