在應用程序中,我想知道爲什麼在退出應用程序時不會調用類的deinit
方法的實例。瞭解AppDelegate中的保留數
作爲一個例子,這裏介紹的Test類是在AppDelegate的applicationDidFinishLaunching
中創建的。
import Cocoa
class Test {
let testVar = 1
init() {
print("Retain count \(CFGetRetainCount(self))")
NSApplication.shared().terminate(self)
}
deinit {
print("Calling deinit")
}
}
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
//@IBOutlet weak var window: NSWindow!
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
_ = Test()
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
print("Terminating")
}
}
這不僅無法撥打測試的方法deinit
,但在測試的init
是2擋計數;我本來期望這是1
如果一個可選的引用存儲在AppDelegate類和創建測試實例時設置,它是零,當applicationWillTerminate
被稱爲
是否有人可以解釋爲什麼保留計數在這裏是2,以及如何確保在應用程序終止時調用Test的deinit?
你是什麼意思的「可選」參考。你的意思是一個Swift可選類型還是你的意思是一個弱引用? –
@AllenHumphreys,抱歉不清楚,這是一個可選類型和一個弱引用的結果。 – TheDarkKnight