Objective-C中+(void)load和+(void)i

2018-07-02  本文已影响16人  IUVO

参照完这两篇文章(Objective-C 深入理解 +load 和 +initialize以及一道题搞清楚Objective-C中load和initialize)后,自己也大概总结了一下。

首先,验证过程很简单,先建立继承自NSObjectPerson类,实现+(void)load+(void)initialize方法:

+(void)load {
    NSLog(@"Person:%s %@", __FUNCTION__,[self class]);
}

+ (void)initialize {
    NSLog(@"Person:%s %@", __FUNCTION__,[self class]);
}

再创建继承自Person类的Chinese类以及Person类、Chinese类的分类,如上述代码实现+(void)load+(void)initialize方法。
main.m文件中的main()方法打印函数执行时机:

int main(int argc, char * argv[]) {
    @autoreleasepool {
        NSLog(@"Main start");
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}


运行后显示如下:
运行结果

分两部分来看:

最后说下使用场景:
+load():通常用来进行Method Swizzle,尽量避免过于复杂以及不必要的代码。
+initialize():一般用于初始化全局变量或静态变量。

上一篇 下一篇

猜你喜欢

热点阅读