美文网首页
分类(category)与类扩展(extension)

分类(category)与类扩展(extension)

作者: Just丶Go | 来源:发表于2017-11-16 17:42 被阅读0次

分类(category):
作用:
1.在不改变原来类的基础上,为该类增加方法
2.理论上不可以在分类中为该类增加成员变量(可以通过其他方法,请往下看)

PS: 在分类中,可以正常访问原本类中的成员变量,方法等

分类的创建流程:


1.png 2.png
3.png

就创建好分类(category)了.

然后

  1. 先在分类中给原本类 添加一个对象方法吧
4.png

然后实现下吧

5.png

好了, 以上就是给一个label 添加一个分类. 分类中又给本类增加了一个计算label宽度的方法

下面 下面说一下 在分类中 为本类增加属性的操作流程
唉唉唉? 不是说分类中不能改变本类么 so… 请往下看


6.png

然后进入到.m文件中, 编译器会报警告, 说你需要实现这个属性的setter 和getter 方法. 如图->


7.png

好了, 接下来, 那就实现下setter 和 getter 方法咯


8.png

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)
类扩展相对使用的就很频繁,也很平常了.

先上一张图


9.png

相信大家都知道怎么用. 容小弟再复述一下

  1. 类扩展可以写在.h文件中也可以写在.m文件中
  2. 类扩展在.m中, 增加的属性,方法都是为私有属性,方法.
  3. 类扩展在.h中,增加的属性,方法都是public的
  4. 声明的方法都是需要实现的
10.png

好了,以上就是本次小弟的总结. 希望各位大大能够帮忙扩充. 小弟感激不尽!~

相关文章

网友评论

      本文标题:分类(category)与类扩展(extension)

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