美文网首页
OC中的initialize和load

OC中的initialize和load

作者: 风chat | 来源:发表于2016-10-09 10:52 被阅读0次

Apple的文档很清楚地说明了initialize和load的区别在于:load是只要类所在文件被引用就会被调用,而initialize是在类或者其子类的第一个方法被调用前调用。所以如果类没有被引用进项目,就不会有load调用;但即使类文件被引用进来,但是没有使用,那么initialize也不会被调用。

它们的相同点在于:方法只会被调用一次。(其实这是相对runtime来说的,后边会做进一步解释)。

文档也明确阐述了方法调用的顺序:父类(Superclass)的方法优先于子类(Subclass)的方法,类中的方法优先于类别(Category)中的方法。

下面是官方给出的说明

+(void)initialize

The runtime sendsinitializeto each class in a program exactly one time just before the class, or any class that inherits from it, is sent its first message from within the program. (Thus the method may never be invoked if the class is not used.) The runtime sends the initialize message to classes in a thread-safe manner.Superclasses receive this message before their subclasses.

+(void)load

Theloadmessage is sent to classes and categories that are both dynamically loaded and statically linked, but only if the newly loaded class or category implements a method that can respond.

The order of initialization is as follows:

All initializers in any framework you link to.

All+loadmethods in your image.

All C++ static initializers and C/C++__attribute__(constructor)functions in your image.

All initializers in frameworks that link to you.

In addition:

A class’s+loadmethod is called after all of its superclasses’+loadmethods.

A category+loadmethod is called after the class’s own+loadmethod.

In a custom implementation ofloadyou can therefore safely message other unrelated classes from the same image, but anyloadmethods implemented by those classes may not have run yet.

相关文章

  • OC中的load和initialize的区别

    OC中的load和initialize的区别 调用方式load是根据函数地址直接调用initialize是通过ob...

  • 技术点

    1、oc中 load 和initialize 方法的异同? 连接 load 方法: 对于每个类(class)及分类...

  • OC中的initialize和load

    Apple的文档很清楚地说明了initialize和load的区别在于:load是只要类所在文件被引用就会被调用,...

  • OC中的initialize和load

    Apple的文档很清楚地说明了initialize和load的区别在于:load是只要类所在文件被引用就会被调用,...

  • iOS学习回顾

    oc部分 1. load和initialize的区别(利用load方法,MJRefresh在app启动时 在UIT...

  • OC中load和initialize方法

    前言 最近在因为工作的原因,空余时间相对多了一点。所以准备好好整理一下OC相关的基础知识,以便加固相关的知识点。 ...

  • + (void)load和 + (void)initializ

    + (void)load和 + (void)initialize + initialize 和 + load 是 ...

  • OC 的 load 和 initialize

    其实有时间还是需要多补充下基础知识的,毕竟步子跨太大会扯到裆。 - load Invoked whenever a...

  • OC 中load和initialize的区别

    + (void)load;+(void)initialize; load:load方法在这个文件被程序装载时调用。...

  • OC中的load和initialize方法

    1、+load方法当类或分类添加到object-c runtime时被调用,子类的+load方法会在它所有父类的+...

网友评论

      本文标题:OC中的initialize和load

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