斯威夫特弱参考混乱

时间:2017-11-22 01:16:45

标签: ios swift memory closures block

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引用计数,因此自我赢得的记忆会被释放?)

1 个答案:

答案 0 :(得分:2)

使用游乐场,试试这个:

class Node {}

var node1: Node? = Node()
weak var node2 = node1
node1 = nil
print(node2 ?? "node2 is nil!")

UILabel表现不同,因为正如Paulw11所暗示的那样,PlaygroundPage本身保留了