我的Swift全局變量沒有被初始化。Swift快速刪除全局變量的初始化
class Person {
let name: String
init(name: String) {
self.name = name
println("\(name) is being initialized")
}
deinit {
println("\(name) is being deinitialized")
}
}
func local() {
let person = Person(name: "Local")
}
local()
var personp: Person? = Person(name: "Optional Global")
personp = nil
var person = Person(name: "Global")
我運行這在一個獨立的二進制文件(因爲apparently the playground has issues with deinit)禁用優化,使用Xcode6-β3:
> xcrun swift -O0 arc.swift && ./arc
Local is being initialized
Local is being deinitialized
Optional Global is being initialized
Optional Global is being deinitialized
Global is being initialized
注意失蹤全球正在deinitialized。
我甚至無法弄清楚這是否是預期的行爲或錯誤,所以如果是前者,那麼可以參考相關法律文獻。
爲什麼全局會被重新啓動?這是一個財產有效不是嗎? – Woodstock
目前的答案都提到這並不是完全意料之外的,因爲它的底層實現。正如我在問題中所說的那樣,如果是這樣的話,那麼我希望得到更明確的引用。這是一個問題,原因是全局可能會跟蹤某種資源(文件,數據庫連接等),並且考慮到當前的行爲,程序員有責任確保不存在這樣的「資源所有者」作爲全球。 – Manav