var label1: UILabel? = UILabel()
weak var label2 = label1
label1 = nil
这里有些混乱:
在这3行之后,label1为nil,但是label2仍然具有引用。根据我的理解,它应该为零,因为它很弱,因此不会牢牢掌握参考。
那么,为什么不起作用呢?
另一个问题:
func request() { [weak self] complete in
guard let strongSelf = self else { return }
strongSelf.printSomething()
strongSelf.doSomething()
}
在Internet请求回调中,我指定了弱的self,并保护有一个strongSelf,以确保如果没有释放self,它将成功。问题是,当守卫后的防线跑开时,自我被释放到其他地方,strongSelf还会存活吗?它对自我有很强的控制力吗? (将+1引用计数添加到self,所以self的内存不会被释放?)
最佳答案
使用游乐场,请尝试以下操作:
class Node {}
var node1: Node? = Node()
weak var node2 = node1
node1 = nil
print(node2 ?? "node2 is nil!")
UILabel的行为有所不同,因为正如Paulw11所暗示的那样,PlaygroundPage本身保留了UILabel
关于ios - swift 的弱引用困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47425347/