IOS--分类和扩展的区别

分类实现原理:

分类编译之后的底层结构是struct category_t 里面存储着分类的对象方法,类方法,属性,协议信息;

在程序运行的时候,runtime会将分类的数据合并到类信息中(类对象,元类对象中),将合并后的分类数据(方法、属性、协议),插入到类原来数据的前面

分类的特点:

  • 如果分类中有和原有类同名的方法, 会优先调用分类中的方法, 就是说会忽略原有类的方法。所以同名方法调用的优先级为 分类 > 本类 > 父类。因此在开发中尽量不要覆盖原有类;
  • 如果多个分类中都有和原有类中同名的方法, 那么调用该方法的时候执行谁由编译器决定;编译器会执行最后一个参与编译的分类中的方法。

作者:左忠飞
链接:https://juejin.cn/post/6844903781520375816
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

分类和扩展的区别

1.分类原则上只能增加方法,但是也可以通过关联属性增加属性

2.拓展可以增加方法和属性,都是私有的。

3.扩展只能在自身类中使用,而不是子类或者其他地方。

4.类扩展是在编译阶段添加到类中,而分类是在运行时添加到类中

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值