Вот мой код:Быстрая делегация - когда использовать слабую ссылку, почему «делегат» - это нуль?
protocol Delegate: NSObjectProtocol {}
class A: NSObject {
weak var delegate: Delegate!
override init() {
super.init()
}
func start() {
//synchronous------- print A: false
print("A:", delegate == nil)
//asynchronous------- print B: true Why is 'true'? How can do that not be released?
let time: NSTimeInterval = 1
let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(time * Double(NSEC_PER_SEC)))
dispatch_after(delay, dispatch_get_main_queue()) {
print("B:", self.delegate == nil)
}
}
}
class B: NSObject, Delegate {
override init() {
super.init()
let a = A()
a.delegate = self
a.start()
}
}
я искал другие вопросы на переполнение стека, но я не могу найти что-то, что может помочь мне, чтобы полностью понять эту ситуацию.
Посмотрите на это: http://stackoverflow.com/questions/34608397/why-is-the-uitabbarcontrollerdelegate-nil-right-after-i-set-it/34608887, возможно, это аналогичный случай. – courteouselk