【发布时间】:2015-08-01 02:33:54
【问题描述】:
假设我有两个对象:A 和 B。
两个对象都有一个引用计数属性。
A 和 B 可以独立创建。它们的引用计数在创建时初始化为 1。
A 可能与B 相关联。发生这种情况时,A 会获得对B 的引用(B 的引用计数会增加),而B 会获得对A 的弱引用(以避免循环)。
如果A 与B 相关联,并且您拥有对A 或B(或两者)的引用,A 和B 必须不被破坏。当所有对它们的外部引用都丢失时,这两个对象都需要销毁。
这是典型的强引用和弱引用的问题情况:
A = createA() # A's ref count: 1
B = createB() # B's ref count: 1
associate(A, B) # B's ref count: 2
put(A) # A's ref count: 0
-> A is destroyed
-> B is put by A (B's ref count: 1)
-> B is notified that A was destroyed
-> B's weak reference to A is reset
A 不应在此处销毁,因为您仍然拥有对 B 的引用。
如何做到这一点?
我还要告诉你,createA()、createB() 和 associate() 是无法破坏的现有 API 的一部分。不过A 和B 的内部结构可能会发生变化。
【问题讨论】:
标签: memory-management reference-counting