类添加属性的方法
1、KVC,通过keyPath设置和读取(也可设置和读取一些未暴露的私有变量)
KVC是怎么寻找Key的
当调用setvalue: forKey时 底层调用顺序如下:
①优先调用set
②当无set方法时,kvc机制会检查
+(bool)accessInstanceVariablesDirectly;
是否返回YES。当你重写了该方法并且返回的时No时 kvc机制会直接执行setValue:forUndefinedKey: 这样做可以让你的类不被别人使用kvc;
③一般情况开发者不会重写
+(bool)accessInstanceVariablesDirectly方法 所以kvc 会搜索有没有名称为
④如果该类中没有set,也没有_成员变量,kvc机制会搜索is
⑤如果该类还是没有
⑥如果都不存在 系统将会执行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");
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 第6.2章(设置属性)
- 为什么你的路演总会超时()
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- thinkphp|thinkphp 3.2 如何调用第三方类库
- 使用composer自动加载类文件
- 一个健康的APP和健全的人格大体类似
- 代笔(想象)
- 每一个节气
- 种树郭橐驼传(文言句式+古今异义+词类活用+通假字)