美文网首页
类添加属性的方法

类添加属性的方法

作者: 武_IOS书 | 来源:发表于2019-01-10 15:09 被阅读0次

1、KVC,通过keyPath设置和读取(也可设置和读取一些未暴露的私有变量)

KVC是怎么寻找Key的
当调用setvalue: forKey时 底层调用顺序如下:
①优先调用set<key>方法 如果有该方法 在setter 方法中完成设置
②当无set方法时,kvc机制会检查
+(bool)accessInstanceVariablesDirectly;是否返回YES。当你重写了该方法并且返回的时No时 kvc机制会直接执行setValue:forUndefinedKey: 这样做可以让你的类不被别人使用kvc;
③一般情况开发者不会重写
+(bool)accessInstanceVariablesDirectly方法 所以kvc 会搜索有没有名称为<key>的成员变量。无论是在.h还是在.m部分定义也无论是使用了什么访问修饰符只要存在成员变量都可以对其成员变量进行赋值。
④如果该类中没有set,也没有_成员变量,kvc机制会搜索is<key>成员变量。
⑤如果该类还是没有
也没有_is kvc 会继续搜索<key>,is<key>再给它们赋值。
⑥如果都不存在 系统将会执行setValue:forUndefinedKey 抛出异常。

2、runtime,动态属性objc_setAssociatedObject和objc_getAssociatedObject。
// 即实现了关联传值
objc_setAssociatedObject(alert, @"btn property",sender,OBJC_ASSOCIATION_ASSIGN);
//通过 objc_getAssociatedObject获取关联对象
NSString *messageString =objc_getAssociatedObject(alertView, @"msgstr");

相关文章

  • Category 和 Extension 的区别.

    类 Extension 可以为类添加属性和方法。使用格式. 类 Category 只能添加方法不能添加属性,添加属...

  • 二十一:Python之动态添加属性方法

    一:动态添加属性方法 动态添加属性:类属性,成员属性 动态添加方法:成员方法,类方法,静态方法 动态添加对象方法需...

  • 在iOS中分类和类中添加属性和方法的区别

    分类和类都可以添加方法和属性 属性分类通过runtime添加属性类直接添加 方法添加方式一样 生成 类中生成的有:...

  • OC中分类的实现原理

    OC中为类添加一个分类(Category)可以实现为类添加对象方法、类方法、添加属性(添加的属性不生成成员变量)、...

  • iOS分类Category相关知识

    分类能干什么 · 为现有类添加实例方法· 为现有类添加类方法(静态方法)· 为现有类添加属性· 为现有类添加协议·...

  • python学习笔记-(4)面向对象

    类定义格式 添加和获取对象属性 类外面添加对象属性 类外面获取对象属性 类里面获取对象属性 魔法方法 __init...

  • runtime相关

    修改系统方法 动态添加方法 动态给系统类添加属性(给分类添加属性) runtime+kvc 转换模型

  • OC类目、延展

    类目: 定义:为现有工程中的类和系统类添加新的方法 作用:在类目中添加新的方法及属性和在原类中添加方法和属性是一样...

  • Swift 基本语法(八)— 为类、结构体添加属性、方法

    为结构体、类、枚举添加属性,设置属性观察器。 添加方法 //属性观察器 懒加载及属性修饰符: 添加实例方法。 都默...

  • iOS 类拓展与分类以及关联对象

    1、类拓展是匿名的分类。2、类拓展可以为类添加属性和方法(类拓展添加的属性和方法是私有的)。3、类拓展在编译时作为...

网友评论

      本文标题:类添加属性的方法

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