Chr*_*lli 3 cocoa-touch ios ios-frameworks
我正在构建一个将包含在其他应用程序中的框架.我有一些代码需要在应用程序首次启动时运行.
许多框架要求开发人员在开始时包含一行[UIApplicationDelegate application:didFinishLaunchingWithOptions:]来初始化他们的框架.但是,我注意到Reveal的框架不需要这个.只需在项目中包含框架即可与您的应用程序集成,并在您的应用程序中启动其Web服务器.
他们如何做到这一点?
派生自的Objective-C类NSObject具有类方法+initialize和+load.
第一个是在你第一次向课程发送消息时运行,所以除非你-application:didFinishLaunchingWithOptions:按照你提到的那样做,否则没有用.
对于应用程序中的每个类,第二个被调用一次,即使它没有被使用:
讨论
加载消息将发送到动态加载和静态链接的类和类别,但前提是新加载的类或类别实现了可以响应的方法.
初始化顺序如下:
您链接到的任何框架中的所有初始值设定项.
图像中的所有+加载方法.
所有C++静态初始化器和C/C++ 属性(构造函数)都在您的映像中运行.
框架中链接到您的所有初始值设定项.
此外:
在所有超类的+加载方法之后调用类的+ load方法.
在类自己的+ load方法之后调用category + load方法.
因此,在自定义的加载实现中,您可以安全地从同一图像中发送其他不相关的类,但是这些类实现的任何加载方法可能还没有运行.
也许您可以将初始化逻辑放在那里.
如果你使用swift,我不知道任何方法.