OC面试题 - 分类(Category)与类拓展(extension)

分类和类拓展的区别是很多面试官喜欢问的,本人也被问过好几次

相同点:两者都是在一个类上面拓展属性或者方法

不通点:1.分类本身不会创建一个存储属性,只会调用set get,这本身是没用的,要添加一个真正能存储值得属性,需要Runtime的关联对象,或者用其它的全局值来代替

2.加载方式,extension只能说把.h的内容写到了.m里面,加载方式和写在.h并没有区别,而分类则是编译的时候利用循环把原有的方法,属性,协议等添加到原类对应的数组里面(值得注意的是,如果同名会覆盖掉原来的函数,因为插入步骤很复杂,但最终结果是分类的方法在前面) 

3.使用场景不同,拓展(extension)只是把.h的东西写在了.m里面,这么写的目的是因为.m在非拓展的情况下无法通过简单的方式定义一个成员属性,导致很多不需要暴露的成员属性都暴露给了导入这个.h的类,所以这个一般是自定义的

分类则是给系统类添加一些实现方式,或者第三方组件的拓展,强行用拓展给这些类拓展实测会报错

拓展的局限在于不能给第三方类的拓展添加实现,有人会说,加个实现不就好了?你说你有实现一个系统类的时间去干点啥不好呢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值