在Objective-C中,在main之前调用什么?

在Objective-C中,在main之前调用什么?,objective-c,Objective C,在Objective-C中,在main之前调用什么?例如,我假设Objective-C中的所有元类在调用main及其加载/初始化方法、全局常量等之前实例化。还有什么?这在任何地方都有记录吗?在main()之前,将执行应用程序中任何类(不在任何加载的框架中)的+load方法。完整的执行顺序在+load文档(NSObject类参考)中给出: load消息被发送到动态加载和静态链接的类和类别,但仅当新加载的类或类别实现了可以响应的方法时 初始化的顺序如下: •链接到的任何框架中的所有初始值设定项 •图

在Objective-C中,在main之前调用什么?例如,我假设Objective-C中的所有元类在调用main及其加载/初始化方法、全局常量等之前实例化。还有什么?这在任何地方都有记录吗?

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 -考虑第一个子弹和最后一个引用的部分,它们意味着一个弱链接的框架会被加载到你的主图像之前吗?在加载上放置一个符号断点并观察。