美文网首页
+load + initialize runtime

+load + initialize runtime

作者: 一代骄马 | 来源:发表于2018-09-15 22:58 被阅读10次

    来源:Objective-C Runtime类的加载与初始化(+ load;+ initialize) - 简书

    Objective-C Runtime类的加载与初始化(+ load;+ initialize) - 简书

    +load方法在类加载时,main()函数之前调用,+initialize方法在类收到第一条消息时调用,可能永远不会调用 main函数之后

    两个方法的调用顺序都是先父类后子类,

    +load方法在runtime中是直接以函数地址的方式进行调用,如果有多个分类,所有分类的+load方法也会被调用,并且在类的+load方法之后被调用,多个分类的+load方法调用顺序取决于编译的顺序

    +initialize方法在runtime中是以发送消息的方式调用的,所以子类会覆盖父类的实现,分类会覆盖类的实现,多个分类只会调用一个分类的+initialize方法。

    在使用时都不要过重地依赖于这两个方法,除非真正必要。在使用时一定要注意防止死锁!

    都不需要调用[super load]、[super initialize]

    load方法没有自动释放池,如果做数据处理,需要释放内存,则开发者得自己添加autoreleasepool来管理内存的释放。

    和load不同,即使子类不实现initialize方法,也会把父类的实现继承过来调用一遍。注意的是在此之前,父类的方法已经被执行过一次了,同样不需要super调用。

    相关文章

      网友评论

          本文标题:+load + initialize runtime

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