分类(category):
作用:
1.在不改变原来类的基础上,为该类增加方法
2.理论上不可以在分类中为该类增加成员变量(可以通过其他方法,请往下看)
PS: 在分类中,可以正常访问原本类中的成员变量,方法等
分类的创建流程:
就创建好分类(category)了.
然后
- 先在分类中给原本类 添加一个对象方法吧
然后实现下吧
好了, 以上就是给一个label 添加一个分类. 分类中又给本类增加了一个计算label宽度的方法
下面 下面说一下 在分类中 为本类增加属性的操作流程
唉唉唉? 不是说分类中不能改变本类么 so… 请往下看
然后进入到.m文件中, 编译器会报警告, 说你需要实现这个属性的setter 和getter 方法. 如图->
好了, 接下来, 那就实现下setter 和 getter 方法咯
ok . 再来说下 runtime 这个关联属性的方法. (据说也是 setKey: value: 的底层实现? —— 临时想到的 错了求指教)
objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key, id _Nullable value, objc_AssociationPolicy policy)
object : 关联的主体(也就是目标)
key : 关联的主题对应的键值( 全局唯一)
value : 要关联的对象的值
policy : 协议方式, 是一个枚举. 这里不详解. 一般选用 objc_AssociationPolicy_RETAIN_NONATOMIC
补充一下 截图里 是模仿的 FDTemplateLayoutCell 对这个方法使用方式
-------------------------------------- -------------------------------------- -------------------------------------- ———————————————————
再来说说 类扩展(extension)
类扩展相对使用的就很频繁,也很平常了.
先上一张图
相信大家都知道怎么用. 容小弟再复述一下
- 类扩展可以写在.h文件中也可以写在.m文件中
- 类扩展在.m中, 增加的属性,方法都是为私有属性,方法.
- 类扩展在.h中,增加的属性,方法都是public的
- 声明的方法都是需要实现的
好了,以上就是本次小弟的总结. 希望各位大大能够帮忙扩充. 小弟感激不尽!~