分类(Category)类扩展(Class Extensions)
参考1:http://www.jianshu.com/p/18d48e7f2aad
1.类扩展可以直接加属性,分类不可以(但是分类里面可以加属性的,但是在.m里面实现set 和get方法就行了)
2.分类一般用来扩充方法,类扩展为某个类附加额外的属性,成员变量
参考2:http://blog.csdn.net/jiajiayouba/article/details/21104987
3.分类能够做到的事情主要是:即使在你不知道一个类的源码情况下,向这个类添加扩展的方法。
此外,分类能够保证你的实现类和其他的文件区分开。
类扩展就像匿名(也就是那个括号里面是空的)的分类一样,除了一样不同的是,类扩展声明必须在@implementation在实现。
参考3:http://www.cocoachina.com/ios/20161018/17784.html
1.分类运用场景举例:想要收集每个页面的启动时间。
问题1:
项目中已经有上百个页面了,如果一个一个的加,浪费时间不说,以后增加了新页面,还需要添加方法。
解决方法:
我们可以发现页面都继承了UIViewController,想要在每个页面都执行的代码,可以写在这些页面的父类中。我们可以把代码写在UIViewController中。
问题2:
UIViewController是官方类,我们只能调用期接口,并不能修改他的实现。
解决方法:
使用分类(category)。
2.分类的执行优先级
2.1在本类和分类有相同的方法时,优先调用分类的方法再调用本类的方法。
2.2如果有两个分类,他们都实现了相同的方法,如何判断谁先执行?分类执行顺序可以通过targets,Build Phases,Complie Source进行调节,注意执行顺序是从上到下的。(只有两个相同方法名的分类)
分类(category)和类扩展(extension)的关系
1.类扩展(extension)是category的一个特例,有时候也被称为匿名分类。他的作用是为一个类添加一些私有的成员变量和方法。
2.类扩展能写点啥?和分类不同,类扩展即可以声明成员变量又可以声明方法。
3对比看一下继承自NSObject的类我们会发现没有上面的代码块
@interface ViewController()//这就是类扩展的写法
@end
4.类扩展可以定义在.m文件中,这种扩展方式中定义的变量都是私有的,也可以定义在.h文件中,这样定义的代码就是共有的,类扩展在.m文件中声明私有方法是非常好的方式。
5.类扩展中添加的新方法,一定要实现。categorygory中没有这种限制。
网友评论