美文网首页基础知识runtime
iOS开发之 runtime(37) :load 方法调用

iOS开发之 runtime(37) :load 方法调用

作者: kyson老师 | 来源:发表于2019-08-11 12:22 被阅读10次
logo

本系列博客是本人的源码阅读笔记,如果有 iOS 开发者在看 runtime 的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(iOS技术讨论群),想要加入的,请添加本人微信:zhujinhui207407,【加我前请备注:ios 】,本人博客http://www.kyson.cn 也在不停的更新中,欢迎一起讨论

本文完整版详见笔者小专栏:https://xiaozhuanlan.com/runtime

前言

上一篇文章笔者讲解了 load 方法的准备工作,主要是将拥有 load 方法的类或者分类找出来,并将其放入到静态变量数组 loadable_classes 以及 loadable_categories 中,并在文章中给出猜测 load 方法调用的顺序。本文将给大家介绍 load 方法的调用过程。

分析

call load 方法代码如下:

void call_load_methods(void)
{
    static bool loading = NO;
    bool more_categories;

    loadMethodLock.assertLocked();

    // Re-entrant calls do nothing; the outermost call will finish the job.
    if (loading) return;
    loading = YES;

    void *pool = objc_autoreleasePoolPush();

    do {
        // 1. Repeatedly call class +loads until there aren't any more
        while (loadable_classes_used > 0) {
            call_class_loads();
        }

        // 2. Call category +loads ONCE
        more_categories = call_category_loads();

        // 3. Run more +loads if there are classes OR more untried categories
    } while (loadable_classes_used > 0  ||  more_categories);

    objc_autoreleasePoolPop(pool);

    loading = NO;
}

相关文章

  • iOS开发之 runtime(37) :load 方法调用

    本系列博客是本人的源码阅读笔记,如果有 iOS 开发者在看 runtime 的,欢迎大家多多交流。为了方便讨论,本...

  • iOS底层原理——runtime

    runtime runtime 是iOS的运行时,用于实现iOS加载和调用属性和方法。 函数中load方法没有使用...

  • iOS-底层-+load和+initialize方法

    一. +load方法 1. +load方法调用顺序 调用时机:+load方法会在Runtime加载类、分类时调用。...

  • load方法

    精华总结:Category中有load方法, load方法会在runtime加载类的时候调用 类的load方法调用...

  • +load

    +load +load 方法的调用时机 +load 方法在 Runtime 加载 Class、Category 时...

  • IOS +load和+initialize方法原理详解及区别

    +load方法: +load方法是通过函数指针地址来调用的。 +load方法会在runtime加载类、分类时调用,...

  • +load 与 +initialize

    14:+load方法调用原理 load方法是在runtime加载类,分类的时候调用,每个类,分类的load方法,在...

  • load和initialize

    +load方法是一定会在runtime中被调用的,只要类被添加到runtime中了,就会调用+load方法。只要是...

  • +load方法 与+initialize方法的比较

    runtime调用load方的的底层实现 总结 +load方法会在runtime加载类,分类的时候进行调用。 每个...

  • iOS原理(四)----+load,+initialize

    iOS原理(四)----+load,+initialize +load +load方法会在runtime加载类、分...

网友评论

    本文标题:iOS开发之 runtime(37) :load 方法调用

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