KVO的使用及底层实现】的更多相关文章

KVO的用法 KVO也就是key-value-observing(即键值观察),利用一个key来找到某个属性并监听其值得改变.用法如下: 添加观察者 在观察者中实现监听方法,observeValueForKeyPath: ofObject: change: context:(通过查阅文档可以知道,绝大多数对象都有这个方法,因为这个方法属于NSObject) 移除观察者 //让对象b监听对象a的name属性 //options属性可以选择是哪个 /* NSKeyValueObservingOpti…
1.KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性.而不是通过调用Setter.Getter方法访问.KVO 就是基于 KVC 实现的关键技术之一. @interface myPerson : NSObject { NSString*_name; int _age; int _height; int _weight; } @end @interface testViewController :UIViewController @p…
1.概念 KVO(Key-Value-Observer)也就是观察者模式,是苹果提供的一套事件通知机制.允许对象监听另一个对象特定属性的改变,并在改变时接收到事件,一般继承自NSObject的对象都默认支持KVO. KVO和NSNotificationCenter都是iOS中观察者模式的一种实现.区别在于:1.相对于被观察者和观察者之间的关系,KVO是一对一的,而不一对多的.也就是kvo监听到被观察属性值改变时只会通知到观察者,是一对一的关系.而通知模式则是在被观察值改变的时候发送全局通知,任何…
#pragma mark - 单例方法(完整的方法) 系统的单例方法名称 sharedApplication defaultManager standardUserDefaults currentDevice [UIApplication sharedApplication]; [NSFileManager defaultManager]; [NSUserDefaults standardUserDefaults]; [UIDevice currentDevice]; + (instancety…
近期为准备找工作面试,在网络上搜集了这些题,以备面试之用. 插一条广告:本人求职,2016级应届毕业生,有开发经验.可独立开发,低薪求职.QQ:895193543 1.简述OC中内存管理机制. 答:内存管理机制:使用引用计数管理,分为ARC和MRC,MRC需要程序员自己管理内存,ARC则不需要.但是并不是 所有对象在ARC环境下均不需要管理内存,子线程和循环引用并不是这样.与retain配对使用的是release,retain代表引用计 数+1,release代表引用计数-1,当引用计数减为0时…
这篇文章简单介绍苹果的KVO底层是怎么实现的,自己仿照KVO的底层实现,写一个自己的KVO监听 #pragma mark--KVO底层实现 第一步:新建一个Person类继承NSObject Person.h #import <Foundation/Foundation.h> @interface Person : NSObject //字符串类型的属性name @property (nonatomic, strong) NSString *name; @end Person.m #impor…
KVO的原理是什么?底层是如何实现的? KVO是Key-value observing的缩写. KVO是Objective-C是使用观察者设计模式实现的. Apple使用了isa混写(isa-swizzling)来实现KVO. 我们可以通过代码去探索一下. 创建自定义类:XGPerson @interface XGPerson : NSObject @property (nonatomic,assign) int age; @property (nonatomic,copy) NSString*…
一.KVO (Key-Value Observing) KVO 是 Objective-C 对观察者模式(Observer Pattern)的实现.也是 Cocoa Binding 的基础.当被观察对象的某个属性发生更改时,观察者对象会获得通知. 有意思的是,你不需要给被观察的对象添加任何额外代码,就能使用 KVO .这是怎么做到的? 二. KVO内部实现原理 KVO是基于runtime机制实现的 当某个类的属性对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基…
1.KVO是基于Runtime机制实现的: 2.当某个类的对象的某个属性第一次被观察时,系统会在运行期间动态地创建该类的一个派生类,在这个派生类中重写基类的任何被观察属性的setter方法,派生类在被重写的setter方法内实现真正的通知机制: 3.如果原类为Person,那么生成的派生类名为NSKVONotifying_Person: 4.我们知道,每一个对象都有一个isa指针(即第一个成员变量)指向当前类,所以系统就是在当一个类的对象第一次被观察的时候,偷偷的将isa指针指向动态生成的派生类…
KVO是基于runtime机制实现的 当某个类的属性对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类(该类的子类),在这个派生类中重写基类中任何被观察属性的setter 方法.派生类在被重写的setter方法内实现真正的通知机制 如果原类为Person,那么生成的派生类名为NSKVONotifying_Person 每个类对象中都有一个isa指针指向当前类,当一个类对象的第一次被观察,那么系统会偷偷将isa指针指向动态生成的派生类,从而在给被监控属性赋值时执行的是派生类的sette…
1.简介 IOS是由苹果公司为iPhone.iPod touch和iPad等设备开发的操作系统. 2.知识点 iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设备的操作系统. iOS系统架构:基于UNIX.分为4个层次:核心操作系统层(最底层)Core OS核心服务层 Core Services媒体层 Media可触摸层 Cocoa Touch 1.Core OS: 它是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSIX标准的一个Un…
|KVC的用法 1.KVC既键值编码(Key Value Coding),基于NSKeyValueCoding协议,它是以字符串的形式来操作对象的成员变量,也就是通过字符串key来指定要操作的成员变量.基本操作如: setValue:forKey:为成员变量赋值.如:[student setValue:@"大明" forKey:@"name"]; valueForKey:获取指定的成员变量.如:NSString *name = [student valueForKe…
KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的.但是篇幅有限所以就分成了两篇博文 KVO实现机制传送门 KVC概述 KVC是Key Value Coding的简称.它是一种可以通过字符串的名字(key)来访问类属性的机制.而不是通过调用Setter.Getter方法访问. 关键方法定义在 NSKeyValueCodingProtocol KVC支持类对象和内建基本数据类型. KVC使用 获取值 valueForKey: 传入NSString属性的…
KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的.但是篇幅有限所以就分成了两篇博文. KVC实现机制传送门 KVO概述 键值观察Key-Value-Observer就是观察者模式. 观察者模式的定义:一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象.这个主动通知通常是通过调用各观察者对象所提供的接口方法来实现的.观察者模式较完美地将目标对象与观察者对象解耦. 当需要检测其他类的属性值变化,但又不想被观察的类知道,有…
关于kvo,kvo能做什么? kvo作为cocoa框架的重要特性之一,在底层框架中被大量使用.在特定的场合使用该特性往往能够带来难以想象的好处,让整个方案变得相当简洁和优雅.比如大名鼎鼎的下拉刷新的svpulltorefresh框架,其实现采用了category动态添加属性和kvo结合的方案,在egoRefresh框架的基础上获得了极大的改善,使调用者所要书写的代码量直接下降了一个量级.其中的奥秘在于通过kvo很好的处理了frame变化的问题,调用者不用再处理frame相关的代码,仅需要聚焦下拉…
概述 由于ObjC主要基于Smalltalk进行设计,因此它有很多类似于Ruby.Python的动态特性,例如动态类型.动态加载.动态绑定等.今天我们着重介绍ObjC中的键值编码(KVC).键值监听(KVO)特性: 键值编码KVC 键值监听KVO 键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Value Codin…
看了那么多博客.描述那么复杂,其实KVC很简单,没描述的那么复杂,所以写一篇简单的易于理解的博文,切入正文: 1.KVC底层是通过runtime对method和value操作  比如说如下的一行KVC的代码: [sit setValue:@"sitename" forKey:@"name"]; 就会被编译器处理成: SEL sel = sel_get_uid ("setValue:forKey:"); IMP method = objc_msg_…
将最近总结的最常用的几种设计模式优势与区别自己小结一下,分享给大家. kvo只能用来对属性作出反应,而不会用来对方法或者动作作出反应,是实现一个对象与另外一个对象保持同步的一种方法,能够提供观察的属性的最新值以及先前值,同时它是一种响应式编程思想,也就是开发中不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,最后影响结果,比如开发中用KVO来监听一个dog类的name属性有没有改变,不需要知道是在哪里做了修改,只要是修改了就收监听到结果.而kvo的底层其实是重…
整理中... 1.KVO内部实现原则 回答:1>KVO是基于runtime机制实现的 2>当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter方法. 派生类在被重写的setter方法实现真正的通知机制(Person->NSKVONOtifying Person) Person类对象p设置self控制器且设置监听属性,就会调用observeValueForKeyPath方法,当Person类的属性被改变时,就会动态生…
KVO的全称是Key-Value Observing,它实现了一种机制,对所关心的属性对象添加观察者,当属性值发生变化时会得到通知,我们可以对变化做相应的处理.看过设计模式的同学应该知道,这是一种典型的观察者模式.KVO的最大优点就是底层框架已经支持,开发人员不需要实现属性值发生变化时发送通知的方案,这样就大大减少开发的工作量.其次,KVO框架很强大,可以支持多个观察者观察同一属性,或者一个观察者监听不同属性. KVO的使用比较简单,基本上都是三步: 1.注册观察者 addObserver:fo…
1.KVO简介 KVO是Objective-C对观察者设计模式的一种实现,它提供一种机制,指定一个被观察对象(如A类),当对象中的某个属性发生变化的时候,对象就会接收到通知,并作出相应的处理.在MVC设计架构下的项目,KVO机制很适合实现mode模型和view视图之间的通讯.例如:代码中,在模型类A创建属性数据,在控制器中创建观察者,一旦属性数据发生改变就收到观察者收到通知,通过KVO再在控制器使用回调方法处理实现视图B的更新: 2.实现原理 KVO的实现依赖于Objective-C强大的run…
最近一直在写swift项目,没有时间更新自己的技术博客,以前在博客里面写过KVO的底层原理,今天我们来看一下KVO的整个使用过程和使用场景(附有demo),大约花大家10-15分钟时间,希望大家看完博客之后对KVO的使用有更清醒的认识. 下面我们按照以下提纲讲解KVO. KVO的基本使用 KVO的触发模式 KVO的属性依赖 KVO的原理探究 自定义KVO KVO对容器类的监听 一.KVO的基本使用 1.基本步骤 通过addObserver:forKeyPath:options:context:注…
KVO在我们项目开发中,经常被用到,但很少会被人关注,但如果面试一些大公司,针对KVO的面试题可能如下: 知道KVO嘛,底层是怎么实现的? 如何动态的生成一个类? 今天我们围绕上面几个问题,我们先看KVO底层实现原理,以及怎么自己写一个KVO? 一.KVO 1. KVO定义 KVO:可以监听一个对象的某个属性是否发生了改变,或者通知其他对象的指定属性发生了改变. 2.KVO实现 2.1 监听某个对象的属性 - (void)addObserver:(NSObject *)observer forK…
定义 KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性 常见的API有: - (void)setValue:(id)value forKeyPath:(NSString *)keyPath; - (void)setValue:(id)value forKey:(NSString *)key; - (id)valueForKeyPath:(NSString *)keyPath; - (id)valueForKey:(NSString *)key;…
介绍 KVO( NSKeyValueObserving )是一种监测对象属性值变化的观察者模式机制.其特点是无需事先修改被观察者代码,利用 runtime 实现运行中修改某一实例达到目的,保证了未侵入性. A对象指定观察B对象的属性后,当属性发生变更,A对象会收到通知,获取变更前以及变更的状态,从而做进一步处理. 在实际生产环境中,多用于应用层观察模型层数据变动,接收到通知后更新,从而达成比较好的设计模式. 另一种常用的用法是 Debug,通过观察问题属性的变化,追踪问题出现的堆栈,更有效率的解…
一.KVC 的用法和实践 用法 KVC(Key-value coding)键值编码,顾名思义.额,简单来说,是可以通过对象属性名称(Key)直接给属性值(value)编码(coding)“编码”可以理解为“赋值”.这样可以免去我们调用getter和setter方法,从而简化我们的代码,也可以用来修改系统控件内部属性,KVC是KVO.Core Data.CocoaBindings的技术基础,他们都是利用了OC的动态性 KVC用法 setValue:forKey:(为对象的属性赋值) setValu…
(1)首先回答什么是线程 1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 (2)什么是多线程 1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务. 多线程的作用:更新显示UI界面.处理用户触摸事件. (3)Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程. (4)开发中实现多线程的方案      1>C语言的POSIX接口:#include<pthread.h>       2…
  目录 关于面试 官方文档 核心代码 (Key-Value Observing) 进阶(手动创建KVO) 关于isa指针 参考文章链接 一.关于面试 面试官:谈一谈你对KVO的理解? A:添加响应者,监听对象变化,当对象改变时调用代理. B:动态创建NSKVONotifying_XX类,修改被监听对象isa指针指向,只要调用对象的set方法, 就会调用NSKVONotifying_XX的set方法.本质:判断对象的set方法有没有被调用, 二.苹果官方文档描述 Automatic key-va…
1.KVO简介 KVO是Objective-C对观察者设计模式的一种实现,它提供一种机制,指定一个被观察对象(如A类),当对象中的某个属性发生变化的时候,对象就会接收到通知,并作出相应的处理.在MVC设计架构下的项目,KVO机制很适合实现mode模型和view视图之间的通讯.例如:代码中,在模型类A创建属性数据,在控制器中创建观察者,一旦属性数据发生改变就收到观察者收到通知,通过KVO再在控制器使用回调方法处理实现视图B的更新: 2.实现原理 KVO的实现依赖于Objective-C强大的run…
来源:  对月流 链接:http://www.jianshu.com/p/f1393d10109d 写在前面: 关于KVC和KVO各种博客多了去了,重新整理下,就当是温习一下吧,也还算是个新手,不对的地方请指教,喜欢的点个喜欢什么也是挺好. 一,KVC KVC也就是key-value-coding,即键值编码,通常是用来给某一个对象的属性进行赋值,例如有人这么一个类,其对外有两个属性,姓名和年龄,我们在创建了一个人p后可以通过点语法直接给p赋值. Person *p = [[Person all…