iOS高级进阶

load方法解析

2019-08-13  本文已影响0人  南城同學

类和分类中 +load的调用顺序:
 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);
static void schedule_class_load(Class cls)
{
    if (!cls) return;
    assert(cls->isRealized());  // _read_images should realize

    if (cls->data()->flags & RW_LOADED) return;

    // Ensure superclass-first ordering
   //这是一个递归调用,传进来的参数如果有父类,就会再次执行,如果没有,就往下执行。
    schedule_class_load(cls->superclass);
  
    //所以父类在list的前面 
    add_class_to_loadable_list(cls);
    cls->setInfo(RW_LOADED); 
}


常规的方法和 +load 方法的区别 ?

注意:如果 写成了[Objcet load] ,则转换成了消息发送机制。会先调用分类的+load方法.


load 方法可以继承吗 ?
上一篇 下一篇

猜你喜欢

热点阅读