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()
}
在互联网请求回调中,我指定弱自我,并且保持强大的自我,以确保如果自己没有被释放,它将成功。问题是,如果守卫跑完后,自己在其他地方被解除分配,那么强者还会继续生活吗?它对自我有很强的保持力吗? (为自己添加+1引用计数,因此自我赢得的记忆会被释放?)
答案 0 :(得分:2)
使用游乐场,试试这个:
class Node {}
var node1: Node? = Node()
weak var node2 = node1
node1 = nil
print(node2 ?? "node2 is nil!")
UILabel表现不同,因为正如Paulw11所暗示的那样,PlaygroundPage本身保留了