参考:http://www.cocoachina.com/ios/20161018/17784.html
但文章说的有一些不对的地方:
1、定义两个分类方法相同时,调用该方法不会依次执行所有类的方法,只会执行Targets,Build Phases,Complie Source下最下面的类(本类不包含,本类是不会被执行的)。
2、个人觉得分类和扩展的不同在于
1、分类只可以扩展方法(但可以通过动态去添加,实现get/set方法),扩展可以扩展方法和属性。
2、扩展在.h文件中声明的是公开方法,需要去实现(虽然不实现也没问题,但你声明出来干啥?万一别人调用了呢??埋坑等人踩???),在.m 文件中声明是私有的。
3、分类可以在不修改原来类的基础上,为一个类扩展方法。而且最有用的是可以扩展系统类,提供了不少便利;
3、回到最开始收集页面启动时间的问题,本类是系统的类,这里是UIViewController,我们可以使用分类扩展他的方法,也可以重写他的方法,可以我需要在调用的地方加头文件,所有子类都写头文件和直接在子类写方法没有什么区别,怎么样可以使得不写头文件,子类就能调用我们写的代码呢?
我们可以进行方法交换(这样可以不必在调用的地方增加头文件),从而使得在实现的时候调用重写的方法。附链接
网友评论