一、iOS+(void)load
1.程序编译之后就会自动执行,并且只会执行一次
2.当父类和子类都实现load函数时,父类的load方法执行顺序要优先于子类
3.当子类未实现load方法时,不会调用父类load方法
4.类中的load方法执行顺序要优先于类别(Category)
5.当有多个类别(Category)都实现了load方法,这几个load方法都会执行,但执行顺序不确定(其执行顺序与类别在Compile Sources中出现的顺序一致)
6.当然当有多个不同的类的时候,每个类load 执行顺序与其在Compile Sources出现的顺序一致
二、iOS+(void)initialize
1.在该类首次创建时自动调用且只会调用一次
2.父类的initialize方法会比子类先执行
3.当子类未实现initialize方法时,会调用父类initialize方法,子类实现initialize方法时,会覆盖父类initialize方法.(子类未实现initialize时,父类的initialize方法会多执行一次,原因是在创建子类对象时,先会调用super的构造方法,这时父类会执行一次initialize,然后在子类执行构造方法是也会执行initialize方法,由于没有实现,会去执行父类的,所以父类又执行了一次)
4.当有多个Category都实现了initialize方法,会覆盖类中的方法,只执行一个(会执行Compile Sources 列表中最后一个Category 的initialize方法)
三、Javastatic{}
静态代码块
1.随着类的加载自动执行,并且只会执行一次
2.父类的静态代码块会比子类先执行
3.当子类没代码块时,会调用父类的代码块
4.如果一个类有多个静态代码块,执行顺序是根据代码的先后顺序
四、java{}
非静态代码块
1.会随着该类对象的创建而执行,并且每创建一次就执行一次
2.父类的非静态代码块会比子类先执行
3.子类对象的创建时会调用父类的非静态代码块
4.如果一个类有多个非静态代码块时,执行顺序时根据代码的先后顺序
5.一个类的静态代码块执行顺序先与非静态代码块