【问题标题】:NSObject's initialize() not called in Release build configuration发布构建配置中未调用 NSObject 的 initialize()
【发布时间】:2017-04-08 14:17:39
【问题描述】:

根据 Apple 文档initialize() 方法在接收到第一条消息之前初始化类。

有人能解释一下为什么 initialize() 在 Release 构建配置中不起作用吗?

例如:

class Test: NSObject {
    override class func initialize() {
        print("initialize")
    }
    class func test() {
        print("test")
    }
}

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        Test.test()
    }
}

Debug 配置中的输出:

initialize
test

发布配置中的输出:

test

【问题讨论】:

    标签: ios swift xcode cocoa


    【解决方案1】:

    我做了一个快速测试,它看起来在Release 配置中+ initialize 不会被调用,除非你创建一个类的实例。但是在Debug 中调用一个类方法就足以触发+initialize。看起来像一个未记录的警告。

    编辑: 更有趣的事实是,对于 DebugRelease 配置中的 Objective-C 项目,调用类方法足以触发 + initialize。我会说这是一个错误。你可能想为它申请一个雷达。

    【讨论】:

    • 具体设置似乎是 Swift 编译器 - 代码生成/优化级别。 '无 [-Onone] 与'快速、单文件优化 [-O]'
    猜你喜欢
    • 2012-02-19
    • 2014-03-21
    • 1970-01-01
    • 2015-09-18
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多