initialize与load方法总结

2017-11-09  本文已影响50人  正直走

类在默写时候需要初始化操作以后才可以正常使用,在Object类中,绝大不跟类都继承子NSObject这个根类,这个类哟两个类方法用来实现初始化操作即+ (void)load方法和+ (void)initialize方法。
说一下这两个放法的作用于区别

#import "BSClassA.h"
@implementation BSClassA

+ (void)load {

    BSClassA *objcet = [BSClassA New];
}

此方法,系统都不会调用,此时对应的是+ (instancetype)allocWithZone:(struct _NSZone *)zone等方法,这些方法即使超类不实现,当前类也会实现。

#import "BSClassA.h"
@implementation BSClassA
+ (void)initialize {
    NSLog(@"%s",__FUNCTION__);
}
@end

#import "BSClassB.h"
@implementation BSClassB
+ (void)initialize {
    NSLog(@"%s",__FUNCTION__);
}
@end

由于BSClassB继承自BSClassA,而initialize又遵守继承规则,即BSClassB在执行初始化的时候回先执行BSClassA中的initialize方法,所以和其他拥有继承特性的方法相同,在子类执行该方法的时候先判断弗雷是否已经载入系统如下

+ (void)initialize {
    if ([BSClassB class]) {
        NSLog(@"%s",__FUNCTION__);
    }
}

这时候只会打印一次,即这样我们即可在所期望的额类载入系统的时候才会执行相关的初始化操作。

上一篇 下一篇

猜你喜欢

热点阅读