模板网站官网,wordpress友言,遵义酷虎网站开发,wordpress superchangerObjective-C中有两个方法比较特殊#xff0c;他们会在Runtime时根据情况自动调用#xff0c;下面我们简单分析一下调用时机以及使用场景~一般在iOS初中级面试时偶尔会被问到load和initialize方法#xff0c;我出了一道题#xff0c;估计会搞晕很多人。大家来看一下下面的程…Objective-C中有两个方法比较特殊他们会在Runtime时根据情况自动调用下面我们简单分析一下调用时机以及使用场景~一般在iOS初中级面试时偶尔会被问到load和initialize方法我出了一道题估计会搞晕很多人。大家来看一下下面的程序以及图一会输出什么(这个Demo请点击这里查看详情)//Father.m (void)load {NSLog(Father:%s %, __FUNCTION__, [self class]);} (void)initialize {NSLog(Father:%s %, __FUNCTION__, [self class]);}//Son.m Class Son Extends Father (void)load {NSLog(Son:%s %, __FUNCTION__, [self class]);}//Sonload.m (void)load {NSLog(Sonload:%s %, __FUNCTION__, [self class]);}//Other.m (void)load {NSLog(Other:%s %, __FUNCTION__, [self class]);} (void)initialize {NSLog(Other:%s %, __FUNCTION__, [self class]);}//Otherinitialize.m (void)initialize {NSLog(Otherinitialize:%s %, __FUNCTION__, [self class]);}//main.mint main(int argc, char * argv[]) {NSLog(Main method start!);return 0;}我是图一答案是首先来说一下调用时机load()方法官方文档上说Invoked whenever a class or category is added to the Objective-C runtime;意思是说当类被加载到runtime的时候就会运行也就是说是在main.m之前~会根据Compile Sources中的顺序来加载但还有一个需注意的加载顺序A class’s load method is called after all of its superclasses’ load methods.A category load method is called after the class’s own load method.意思是说有继承关系的会先调用父类load扩展的类在所有的类在方法之后再开始扩展方法的load每个类只会调用一次loadinitialize()方法官方文档上说Initializes the class before it receives its first message.意思是在类接收第一条消息之前初始化类值得注意的点是类初始化的时候每个类只会调用一次initialize()如果子类没有实现initialize()那么将会调用父类的initialize()也就是意味着父类的initialize()可能会被多次调用最后说下使用场景load():通常用来进行Method Swizzle尽量避免过于复杂以及不必要的代码initialize():一般用于初始化全局变量或静态变量EOF:好了通过上述的所概括应该能知道为什么答案是那样了~另外如果文章中有什么错误或者意见请大家多多指教~