+load,+initialize原理

时间:2022-05-09 14:43:20

+load,+initialize原理

1.load

父类的load方法在子类load方法之前调用,分类的load方法在原来类load方法之后调用,依赖类的load方法会在自己之前调用,总之所有的类的load方法都会被调用

用途:Method Swizzling 和 AOP 实践

2.initialize

initialize 子类会覆盖父类的initalize方法, 分类会覆盖被扩展类的initalize方法

如果子类未定义该方法,那么子类就会调用父类的initialize方法,所以第一次使用一个类之前,最终都会调用一个initliaze方法,无论该方法来自于自己还是原来的类,还是父类,且只调用一个initalize

存在一种情况是;多个子类都为定义initialize方法,那么父类的initialize方法可能会被调用多次哦,所以使用initialize 如果只想调用一次最好进行判断

+(void)initialize
{
if (self == [MTMetaTool self]) {
//write your code
}
}

用途: 实现单例模式

  1. reference: