面试合集

+load 和+initialize的区别

2021-01-06  本文已影响0人  写代码的小农民

首先调用时机不同,决定了完全不同的调用原理,形成了很大的差异。

写在前面的话

最好不要在+load里初始化第三方的库,很有可能app启动耗时很久甚至失败。
自己的业务逻辑多使用+initialize替代+load。

调用时机

在继承和分类里的调用顺序。

1.先调用类的+load
按照编译先后顺序调用(先编译,先调用)
调用子类的+load之前会先调用父类的+load

2.再调用分类的+load
按照编译先后顺序调用(先编译,先调用)和继承没有关系

用途

+ (void) load
{
    static dispatch_once_t token;
    dispatch_once(&token, ^{
       // init......
    });
}

+ (void)initialize
{
    static dispatch_once_t token;
    dispatch_once(&token, ^{
       // init......
    });
}

如有错误或者新的见解欢迎在评论区约谈...

上一篇下一篇

猜你喜欢

热点阅读