2016-11-24 41 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

相關問題