要在手錶更新併發症,我使用一個單獨的類ComplicationController
(不相關的代碼已被以下省略):CLKComplicationServer初始化已初始化的單例類CLKComplicationDataSource,雖然的init()是私有
final class ComplicationController: NSObject, CLKComplicationDataSource {
static let shared = ComplicationController() // Instantiate the singleton
private override init() {
super.init()
print("====self: \(self): init")
} // Others can't init the singleton
}
的單是由擴展代表手錶的創建:
class ExtensionDelegate: NSObject, WKExtensionDelegate {
override init() {
super.init()
_ = ComplicationController.shared
}
}
當我在上面打印語句與斷點推出手錶擴展,執行休息和堆棧跟蹤是:
當我再在一個單一的步驟執行打印語句,調試器顯示:
====self: <Watch_Extension.ComplicationController: 0x7bf35f20>: init
後另一單個步驟中,調試器顯示:
====self: <Watch_Extension.ComplicationController: 0x7d3211d0>: init
顯然,CLKComplicationServer
創建了另一個單例實例。
我的問題是:我有什麼不對或這是一個錯誤?如果它是一個錯誤,是否有解決方法?
PS:它不幫而不是在ExtensionDelegate
中初始化ComplicationController
。在這種情況下,只要在代碼中的任何位置使用ComplicationController.shared
,就會創建第二個實例。
我做了一些測試,得到了相同的結果,創建了兩個單例實例。然而,我在'ComplicatonController'的實例方法中,'func doSomething(){print(「Function called singleton」)打印'self'; print(self)}',即使我從ExtensionDelegate和InterfaceController調用這個函數兩次,它都會爲自己輸出相同的內存地址。 –