2018面试题总结

2018-03-19  本文已影响20人  雪丹妮_66865

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在方法列表的前面而已,所以我们只要顺着方法列表找到最后一个对应名字的方法,就可以调用原来类的方法。

上一篇下一篇

猜你喜欢

热点阅读