面试题答案
一键面试+load方法
- 调用情况:
- 当类或分类被加载到内存时,会调用其
+load
方法。加载顺序是先加载主类,再加载分类。并且无论类或分类是否被使用,只要被加载就会调用+load
方法。
- 当类或分类被加载到内存时,会调用其
- 特点:
- 每个类和分类的
+load
方法在程序启动时只调用一次。 - 类的
+load
方法会在其所有超类的+load
方法之后调用。 - 分类的
+load
方法会在其主类的+load
方法之后调用。
- 每个类和分类的
+initialize方法
- 调用情况:
- 当类或其任何子类接收到第一条消息时,会调用类的
+initialize
方法。如果子类没有实现+initialize
方法,会调用父类的+initialize
方法(前提是父类还没有被初始化)。
- 当类或其任何子类接收到第一条消息时,会调用类的
- 特点:
- 每个类的
+initialize
方法在首次使用该类或其子类时调用,只调用一次。 - 运行时系统会保证在调用子类的
+initialize
方法之前,其父类的+initialize
方法已经被调用。
- 每个类的
区别
- 调用时机:
+load
在类和分类被加载到内存时调用;+initialize
在类或子类接收到第一条消息时调用。
- 调用频率:
+load
每个类和分类只调用一次;+initialize
每个类只调用一次,但可能通过子类触发父类的+initialize
方法。
- 继承关系影响:
+load
类的+load
方法调用在超类之后,分类在主类之后;+initialize
子类若未实现,会调用父类的,但父类已调用过则不会重复调用。