美文网首页
+ (void)load + (void)initialize

+ (void)load + (void)initialize

作者: 昵称已经被人占用了 | 来源:发表于2021-04-10 00:44 被阅读0次

    + (void)load

    1.+load方法加载顺序:父类> 子类> 分类 (load方法都会加载)

    注意:(如果分类中有A,B,顺序要看A,B加入工程中顺序) ,

    可能结果:( 父类> 子类> 分类A> 分类B ) 或者( 父类> 子类> 分类B> 分类A )

    2.+load方法不会被覆盖(比如有父类,子类,分类A,分类B,这四个load方法都会加载)。

    3.+load方法调用在main函数前。

    ————————————————

    + (void)initialize

    +initialize方法加载顺序有以下4种情况

    (1)分类 (子类没有initialize方法,父类存在或者没有initialize方法),父类的initialize不会加载。

    (2)分类> 子类 (多个分类就看编译顺序,只有存在一个)文件的编译顺序,最后一个。

    (3)父类> 子类 (分类没有initialize方法,子类、父类都有initialize)

    (4)父类 (子类,分类都没有initialize方法)

    总结+initialize:

    1.当调用子类的+ initialize方法时候,先调用父类的,如果父类有分类, 那么分类的+ initialize会覆盖掉父类的。

    2.分类的+ initialize会覆盖掉父类的

    3.子类的+ initialize不会覆盖分类的

    4.父类的+ initialize不一定会调用, 因为有可能父类的分类重写了它

    5.发生在main函数后。

    主类和分类有同名方法。

    父类和分类有同名方法,分类会覆盖主类的方法。只保留最后编译的分类,父类不会走。

    比如:主类Person和分类Person+A都有 eat类方法,执行程序结果如下

    子类和父类同名、父类分类同名。

    子类只调用子类方法,父类调用分类的方法

    如:

        subClass*son = [subClassnew];

        [son eat];

      子类---eat   

        Person*person = [Personnew];

        [分类 eat];

      分类---eat

    相关文章

      网友评论

          本文标题:+ (void)load + (void)initialize

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