[Instance A] tree / \ / \ / \ ↓ ↓ [Instance B] [Instance C] apple bug
实例A 必须将副本引用到实例B 和实例C 。
如果我保留或发布 Instance A ,它引用了其他两个实例,那么各种引用计数会发生什么变化?
答案 0 :(得分:1)
保留或释放A时,只会更改其引用计数。 B和C会发生什么取决于您的模型和实施。
如果A“拥有”或需要保持B / C,它应该在某个时刻保留它(独立于A本身被保留),并在A被解除分配时释放它。
如果您没有实施A,则需要检查文档以查看它是否拥有B / C,或者您需要明确保留和释放它们。
我检查了您的原始问题,不确定这是否是您正在寻找的答案。如果没有,请解释一下......
答案 1 :(得分:1)
您不关心保留计数。不,老实说,你没有。你只关心A是否拥有B和C(或者更确切地说,是否拥有B和C的所有权)。
所以可能在某个地方你有一个方法来设置A的孩子(它可能是A的指定初始化者)。如果该方法保留B和C,那么当A不再需要所有权时,A必须释放B和/或C.这将在两种情况下:
无论如何,说完了,回答你的问题:
如果保留A,它对B和C的保留计数没有影响。
如果你释放A,它对B和C 的保留计数没有影响,除非没有其他人拥有A的所有权。在这种情况下,将调用A的dealloc,这将释放B和C.
答案 2 :(得分:0)
当你在objectA上调用retain或release时,持有objectA引用的对象不会发生任何事情。 (除非你已经覆盖了这些方法。)(保留增加保留计数和释放减少保留计数)
如果保留计数变为0,则会释放dealloc并释放objectA。并且您负责释放类的已分配对象。仍然持有objectA引用的其他对象成为悬空指针。
此致 Dhana。