看了好多文章觉得总结的不是我想要的,斗胆再总结一下
load
1、类被系统添加到runtime之前调用;
2、调用顺序:父类先于子类,子类先于category(category里的实现不会覆盖原类实现);
initialize
1、向类发送第一个消息之前调用(系统runtime自动调用的load不算);
2、会先调用父类的实现,再调用子类的实现,如果子类没有实现,还是调用继承自父类的。可以看出,父类的实现可能被多次调用。
3、系统对每个类只会发送一次消息(调用);
4、如果category中实现了initialize方法,会覆盖原先类中已经有的实现(如果有的话。没有就充当该类的实现);
load 、initialize相同点
1、自定义实现中都不需要显示调用父类的实现;
2、在不考虑开发者主动使用的情况下,系统最多会调用一次;
3、父类先于子类调用;
应用:
load中可以做method swizzling;
initialize可以初始化全局变量;
网友评论