2016-11-24 18 views
5

根据Apple文档initialize()方法在接收到第一条消息之前初始化该类。NSObject的initialize()在Release版本配置中未调用

有人可以解释为什么initialize()在Release build配置中不起作用吗?

例如:

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

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

输出的调试配置:在发布配置

initialize 
test 

输出:

test 

回答

3

我做了一个快速测试,它看起来像Release配置除非创建t的实例,否则不会调用+ initialize他上课。但在Debug中调用一个类的方法足以触发+initialize。看起来像一个无证的警告。

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

+0

感谢您的回答。创建bug报告https://openradar.appspot.com/29389821 –

+0

具体的设置似乎是Swift编译器 - 代码生成/优化级别。 '无[-Onone]与'快速单文件优化[-O]' – DDP

相关问题