美文网首页
iOS oc-分类(Category)类扩展(Class Ext

iOS oc-分类(Category)类扩展(Class Ext

作者: 青菜白玉堂 | 来源:发表于2017-07-05 16:48 被阅读109次

    分类(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中没有这种限制。

    相关文章

      网友评论

          本文标题:iOS oc-分类(Category)类扩展(Class Ext

          本文链接:https://www.haomeiwen.com/subject/vfmqhxtx.html