編譯程序時出現運行時錯誤,故意SomeObject
的實例化是短暫的,但獲得的塊通過捕獲引用,在操場中不起作用,但在編譯程序時顯示錯誤並運行。暫時在塊中捕獲自己
目標是臨時保存短期對象SomeObject
的引用,直到回調完成。
編輯 - 如果我評論[unowned self]
內go
它的作品,因爲我相信它創建了一個有力的參考,但希望沒有內存泄漏有??? (無論如何,調用者對象都超出了範圍)。請確認我不應該在這裏使用[unowned self]
。
import Foundation
class SomeObject {
func go() { //i guess problem is here, it can't find self,
anotherObject.asyncCall({ [unowned self] in //works if i comment this
self.complete()
})
}
func complete() { //can't move this routine inside block, part of parent class api
println("received callback after 5 sec")
}
}
class AnotherObject {
var callback: (() ->())?
init() {}
func asyncCall(callback:() ->()) {
self.callback = callback
let delay = 5 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), { [unowned self] in
self.callback!()
})
}
}
var anotherObject = AnotherObject() //not global object but permanent lived
for i in 1...3 { //can't change here, it's part of API that instantiates my objects
var instance = SomeObject() //short lived objects
instance.go()
}
deinit日誌的東西真的把它的神祕 – user2727195