美文网首页
Category和extension扩展

Category和extension扩展

作者: Peanut_S1 | 来源:发表于2019-08-14 14:10 被阅读0次

    1.Category分类同一个方法创建多个,会出现什么问题,为什么?
    针对这个问题,我大概去了解了一下类目的底层构造。
    类目里的方法是在runtime运行机制的作用下,合并到其类的方法列表了了,并非“把类里的方法覆盖掉”,而是一并列关系。方法调用的顺序也是
    (Category->本类->父类)。
    当多个category中存在同名的方法,运行时到底调用哪个方法由编译器决定,最后一个参与编译的方法会被调用。

    1. Category的好处:
      1. 实现对类的扩展,将类的实现分散到多个文件管理,不同的功能API进行了分类
        2.把framework的私有方法公开。如果直接调用其他类的私有方法会报错,可以在类目中声明这些方法(不必提供方法实现),编译器就不会再产生警告。
        3.category局限性

    是可以为一个类添加属性的,但是一定做不到添加成员变量,不要混淆了成员变量和属性的概念。

    分类中用@property定义变量,只会生成变量的getter,setter方法的声明,不能生成方法实现和带下划线的成员变量。

    因为在编译完成后,对象的内存布局已经确定,如果添加实例变量会破坏类的内部布局。

    扩展

    可以给类添加属性和方法,但都是私有的

    extension是在编译时决议的,是类的一部分。
    category时运行时,把category的实例方法,协议与类的实例方法,协议合并到一起的,类方法添加到metaclass的。
    因此,运行时期对象的内存结构已经确定,如果添加属性会破坏类的内存布局,所以不可以添加实例变量。

    相关文章

      网友评论

          本文标题:Category和extension扩展

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