我很难理解关闭是如何创建的。

例如在ViewController A中:

dispatch_async(dispatch_get_main_queue()) [weak weakSelf = self] {
  weakSelf?.property = "something"
}

我想这段代码是如何工作的

1)ViewController A只是创建一个闭包(假设闭包存储在堆地址:0中),并对闭包附加了强大的引用

2)主队列中的对象还具有另一个对闭包的强引用,因为内存指针正在由ViewController A中的函数传递

3)当ViewController A在gcd调用闭包之前被释放时,闭包对象仍然在堆中,因为gcd对它有很强的引用,但是我不明白当ViewController为nil时,gcd怎么会在闭包中调用闭包ViewController A?

我误会了吗?

最佳答案

闭包不在“ViewController A中”。您说“ViewController A ...对闭包附加强引用”,但是在显示的代码中没有强引用。调用dispatch_async会将闭包移交给GCD,GCD将保留它并将其放置在队列中以供以后执行。

在执行时,对weakSelf的引用指向ViewController A(因为ViewController A仍然存在),在这种情况下,我们现在可以设置其property,或者它是nil(因为ViewController A已经不存在) ,在这种情况下我们什么也不做,因为那是问号的意思。

关于ios - 快速关闭通过引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38966123/

10-11 22:52
查看更多