分类实现原理:
分类编译之后的底层结构是struct category_t 里面存储着分类的对象方法,类方法,属性,协议信息;
在程序运行的时候,runtime会将分类的数据合并到类信息中(类对象,元类对象中),将合并后的分类数据(方法、属性、协议),插入到类原来数据的前面
分类的特点:
- 如果分类中有和原有类同名的方法, 会优先调用分类中的方法, 就是说会忽略原有类的方法。所以同名方法调用的优先级为
分类 > 本类 > 父类
。因此在开发中尽量不要覆盖原有类; - 如果多个分类中都有和原有类中同名的方法, 那么调用该方法的时候执行谁由编译器决定;编译器会执行最后一个参与编译的分类中的方法。
作者:左忠飞
链接:https://juejin.cn/post/6844903781520375816
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
分类和扩展的区别
1.分类原则上只能增加方法,但是也可以通过关联属性增加属性
2.拓展可以增加方法和属性,都是私有的。
3.扩展只能在自身类中使用,而不是子类或者其他地方。
4.类扩展是在编译阶段添加到类中,而分类是在运行时添加到类中