美文网首页
KVO 、KVC 和 单利

KVO 、KVC 和 单利

作者: 闪电迷 | 来源:发表于2016-09-06 11:52 被阅读115次

"单利模式":在程序的运行过程中,允许在程序的任何一个地方用同一种方法获取同一个对象(实例)的方式。

单利的作用:可以保证在程序运行过程中,一个类只有一个实例,而且该实例方便外界访问。控制了实例的个数,节约系统资源。

单利的应用场景:在整个应用程序中,共享一份资源,这份资源只需要创建初始化一次就行,比如登陆的控制器。

单利的设计:1,提供一个类方法供外界方便获取这个类的单利对象。注意:命名要规范,share / share +类名,default/default+类名。

2,提供一个静态变量,用来保存当前类唯一的一个实例对象。

3,+ alloc方法在内部会调用一个allocWithZone:方法(分配内存),也就是说在外界通过alloc init方法创建该类的实例的时候会调用这个方法,然后重写这个方法。在这个方法里面使用静态的一次性函数

/*

static dispatch_once_t oncetoken;

dispatch_once (&onceToken, ^{

_instance = [super allocWithZone:zone];

});

*/

在一次性函数里调用[superallocWithZone:zone]并对静态的变量赋值这时这个静态变量保存了给当前类的实例对象分配的内存空间。并在重写的这个方法最后返回这个静态变量,保证了只分配一块内存。

4,实现第一步的那个类方法。返回[[selfalloc] init];

5,严谨起见,重写copyWithZone:和mutableCopyWithZone:方法,返回那个静态变量。

KVO 

KVO实现原理:

1,KVO是基于runtime机制实现的。

2,当某个类的属性对象第一次被观察时,系统就会在运行时动态的创建一个该类的派生类,在这个派生类中重写基类中任何被观察的属性的setter方法,派生类在被重写的setter方法内部实现真正的通知机制。

3,如果原来的类名为Person ,那么生成的派生类名为NSKVONotifying_Person,(就是在原类类名的基础上,在前面加NSKVONotifying_).

4,每个类的对象都有一个isa指针指向当前的类,当类的对象第一次被观察,那么系统就会将isa指针指向动态生成的这个派生类,再给被监控的属性赋值时执行的其实是派生类里的setter方法。

5,键值观察通知依赖于NSObject的两个方法:willChangeValueForKey:和didChangeValueForKey:在一个被观察属性发生改变之前,will方法一定会被调用,这一次记录旧值,当发生改变后did方法被调用记录新值,继而调用observeValueForKey: ofObject:change:context:

6,KVO这套实现机制中,苹果偷偷重写了class方法,让我们误认为还是使用的当前类,从而隐藏派生类。

KVC

KVC实现原理:

KVC会遍历字典,将字典里的的key和value的值,赋值给模型中对应的属性,他会调用模型中对应属性的setter方法,如果没有setter方法,会判断有没有跟key同名的属性,有就直接赋值,没有就判断有没有跟属性相同带有下划线的属性,有就直接赋值,没有就报错,找不到对应的成员属性。

相关文章

  • KVO 、KVC 和 单利

    "单利模式":在程序的运行过程中,允许在程序的任何一个地方用同一种方法获取同一个对象(实例)的方式。 单利的作用:...

  • KVC,KVO

    KVC , KVO KVC和KVO的区别及应用 KVC/KVO原理 1. KVC键值编码 KVC,即是指NSKey...

  • KVC、KVO

    KVC、KVO探识(一)KVO和KVO的详细使用 KVC、KVO探识(二)KVC你不知道的东西 KVC、KVO探识...

  • ios基础——KVO、KVC

    KVO和KVC常见问题: 1.KVC和KVO是什么.2.KVC和KVO的原理是什么3.KVC和KVO的使用场景4....

  • 可能碰到的iOS笔试面试题(7)--KVO-KVC

    KVC-KVO KVC的底层实现? KVO的底层实现? 什么是KVO和KVC? KVO的缺陷? KVO是一个对象能...

  • iOS 面试高频知识点

    一, 设计模式 mvc、mvvm 、单利、工厂、责任链等应用场景 二, KVO KVC 三,算法(快排重点) 四,...

  • KVC 和 KVO

    iOS-KVC和KVO精炼讲解(干货)KVC 和 KVOiOS开发系列--Objective-C之KVC、KVO细...

  • KVC、KVO的本质

    这篇文章介绍KVC、KVO的本质。如果你对KVC、KVO不了解,推荐先查看其用法:KVC和KVO学习笔记[http...

  • iOS-KVC和KVO

    重新整理一波KVO和KVC. 抛出几个常见问题 : 1.KVC和KVO是什么.2.KVC和KVO的原理是什么3.K...

  • KVC KVO高阶应用

    KVC KVO高阶应用 KVC KVO高阶应用

网友评论

      本文标题:KVO 、KVC 和 单利

      本文链接:https://www.haomeiwen.com/subject/casdettx.html