在Objective-C中,在main之前调用什么?
在Objective-C中,在main之前调用什么?例如,我假设Objective-C中的所有元类在调用main及其加载/初始化方法、全局常量等之前实例化。还有什么?这在任何地方都有记录吗?在在Objective-C中,在main之前调用什么?,objective-c,Objective C,在Objective-C中,在main之前调用什么?例如,我假设Objective-C中的所有元类在调用main及其加载/初始化方法、全局常量等之前实例化。还有什么?这在任何地方都有记录吗?在main()之前,将执行应用程序中任何类(不在任何加载的框架中)的+load方法。完整的执行顺序在+load文档(NSObject类参考)中给出: load消息被发送到动态加载和静态链接的类和类别,但仅当新加载的类或类别实现了可以响应的方法时 初始化的顺序如下: •链接到的任何框架中的所有初始值设定项 •图
main()
之前,将执行应用程序中任何类(不在任何加载的框架中)的+load
方法。完整的执行顺序在+load
文档(NSObject
类参考)中给出:
load
消息被发送到动态加载和静态链接的类和类别,但仅当新加载的类或类别实现了可以响应的方法时
初始化的顺序如下:
•链接到的任何框架中的所有初始值设定项
•图像中的所有+加载方法
所有C++静态初始化器和C/C++<代码>属性>(构造函数)< /C>函数在您的映像中。
•框架中链接到您的所有初始值设定项
此外:
•类的+load
方法在其所有超类的+load
方法之后调用
•在类自己的+load
方法之后调用category+load
方法
因此,在load的自定义实现中,您可以安全地从同一映像向其他不相关的类发送消息,但这些类实现的任何load方法可能尚未运行
因此,如果将+load
添加到应用程序委托类中,它将在main()
之前运行
Hth
我想它和C++ +代码> +加载<代码>一样,我很好奇你为什么好奇。你想实现什么?我可能错了,但我一直认为,由于Objective-C的动态特性,加载/初始化会被称为“及时”。@CrimsonChris我试图了解一些事情。@Jasperbluse加载不会被及时调用-它是在main之前完成的。初始化可能是JIT(在发送给类的第一条消息期间)。弱链接框架的元类如何?@Boon-框架中的任何+load
方法都会在动态链接器加载框架时执行,无论何时(如果)发生。弱链接与此正交,使应用程序能够在有或没有特定框架的情况下执行。我的意思是元类对象可能也会实例化,否则调用[MPPlayableContentManager class]来检查当前操作系统版本是否支持API将不起作用。我的猜测是正确的吗?@ Boon -考虑第一个子弹和最后一个引用的部分,它们意味着一个弱链接的框架会被加载到你的主图像之前吗?在加载上放置一个符号断点并观察。