【发布时间】:2017-08-07 01:32:47
【问题描述】:
Objective-C 声明了一个类函数initialize(),它在使用之前为每个类运行一次。它通常用作交换方法实现(swizzling)等的入口点。
Swift 3.1 弃用此函数并发出警告:
方法'initialize()'定义了Objective-C类方法'initialize', 不能保证被 Swift 调用并且将被禁止 在未来的版本中
如何解决这个问题,同时仍保持我目前使用 initialize() 入口点实现的相同行为和功能?
【问题讨论】:
-
更准确地说,方法
+initialize在使用类中的任何内容之前执行。实际上它是执行的,当包含该类的包被加载时,应用启动后会发生什么。 -
@AminNegm-Awad:我不确定这是否正确。也许您正在考虑
load方法(在 Swift 中不可用)? -
+initialize也一样。 运行时向程序中的每个类发送初始化,就在类或任何继承自它的类从程序中发送其第一条消息之前。 不能保证这是在程序中完成的开始。这样的保证会导致立即加载所有捆绑包以获取+initialize中的代码。 – 与+load的区别在于,它在类 和类别 上执行。 (在类和类别中具有相同选择器的方法!)但是,当然,对于类别而言,可能的延迟调用这一事实比类更重要。 -
@AminNegm-Awad:也许我误解了你的第一条评论。你说实际上,
initialize在 bundle ... 加载时被调用。这不是我所经历的。 -
是的,正如我几小时前所说的。但这有时很重要,我。 e.在我提到的情况下。但是,不能保证在应用启动时将其发送到类对象(在 Objective-C 中,没有像
initialize()这样的成员函数,它们不会被调用,但会发送消息)。
标签: ios objective-c swift