Objective-C学习总结二 kvo kvc

KVO

  • kvo 全称是Key-Value Observing 俗称键值监听,可以用来监听一个对象属性值的改变。
C48BFA40-41B7-4846-BA1B-2B9590A27709.png
未使用KVO监听
683CD78E-670E-4A7A-B54E-75D527C87985.png
使用了KVO监听
9F2333C9-D8CB-4C11-AC62-A5DA79093320.png

NSSetValueAndNOtify的内部实现

      [self willChangeValueForkey:@"age"];
        //原来的setter实现
      [self didChangeValueForkey:@"age"];

调用willChangeValueForKey;
调用原来的setter实现
调用didChangeValueForKey;
didChangeValueForKey:回调用observer的observerValueForKeyPath:ofObject:change:context方法。

KVC

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;
  • setValue:forkey:的原理


    8716F928-DFC4-47A3-AD26-9DC0267562F5.png

    accessInstanceVariablesDirectly 方法返回默认值为YES

  • valueForKey:的原理


    B8143DD9-DD7B-4D68-A85A-EF2AF7D459FC.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容