【问题标题】:How can I make my framework's code automatically run when the app launches?如何让我的框架代码在应用启动时自动运行?
【发布时间】:2016-02-03 03:33:43
【问题描述】:

我正在构建一个将包含在其他应用程序中的框架。我有一些代码需要在应用程序首次启动时运行。

许多框架要求开发人员在[UIApplicationDelegate application:didFinishLaunchingWithOptions:] 的开头添加一行来初始化他们的框架。但是,我注意到Reveal 的框架不需要这个。只需在项目中包含框架就足以与您的应用集成,并在您的应用中启动它们的 Web 服务器。

他们是怎么做到的?

【问题讨论】:

    标签: ios cocoa-touch ios-frameworks


    【解决方案1】:

    派生自NSObject 的Objective-C 类具有类方法+initialize+load

    第一个是在你第一次向班级发送消息时运行的,所以除非你在-application:didFinishLaunchingWithOptions: 中做一些事情,否则它是没有用的。

    对于应用程序中的每个类,第二个只被调用一次,即使它没有被使用:

    讨论

    加载消息被发送到类和类别 动态加载和静态链接,但前提是新 加载的类或类别实现了可以响应的方法。

    初始化顺序如下:

    1. 您链接到的任何框架中的所有初始化程序。

    2. 图片中的所有 +load 方法。

    3. 所有 C++ 静态初始化器和 C/C++ 属性(构造函数) 图像中的函数。

    4. 链接到您的框架中的所有初始化程序。

    另外:

    • 一个类的 +load 方法在其所有超类的 +load 之后被调用 方法。

    • 在类自己的+load方法之后调用一个类别的+load方法。

    在负载的自定义实现中,您可以因此安全地发送消息 来自同一图像的其他不相关的类,但任何加载方法 这些类实现的可能还没有运行。

    来源: Apple's Official Documentation (NSObject Class Reference).

    也许你可以把你的初始化逻辑放在那里。

    如果你用的是swift,我不知道有什么方法。

    【讨论】:

      【解决方案2】:

      对于 swift,只需添加一个名为 load() 的类函数

      来源:https://developer.apple.com/documentation/objectivec/nsobject/1418815-load

      【讨论】:

      猜你喜欢
      • 2015-12-11
      • 2022-06-14
      • 2013-01-15
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      相关资源
      最近更新 更多