1. 介绍一下分类,能用分类做什么?内部是如何实现的?它为什么会覆盖掉原来的方法?
category的主要作用是为已经存在的类添加方法。除此之外,apple还推荐了category的另外两个使用场景
1> 可以把类的实现分开在几个不同的文件里面。这样做有几个显而易见的好处,
a)可以减少单个文件的体积
b)可以把不同的功能组织到不同的category里
c)可以有多个开发者共同完成一个类
d)可以按需加载想要的category等等。
2> 声明私有方法
注意点:
1> category的方法没有完全替换掉原来类已经有的方法,也就是说如果category和原来类都有methodA,那么category附加完成之后,类的方法列表里面会有两个methodA
2> category的方法被放到了新方法列表的前面,而原来类的方法被放到了新方法列表的后面,运行时在查找方法的时候是顺着方法列表的顺序查找的,它只要一找到对应名字的方法,就会罢休,殊不知后面可能还有一样名字的方法。(即原有类的方法不会被执行)
1.2 另外,如果两个不同的分类里面有相同的方法,会先找到最后一个编译的category里的对应方法。
1.3 如果原有类以及其两个不同的分类都实现了+load方法,+load的执行顺序是先类,后category,而category的+load方法执行顺序是根据编译顺序决定的。
1.4 怎么调用原来类中被category覆盖掉的方法?
category并不是完全替换掉原来类的同名放法,只是category在方法列表的前面而已,所以我们只要顺着方法列表找到最后一个对应名字的方法,就可以调用原来类的方法。
网友评论