繁体   English   中英

在Objective-C中如何处理参考副本?

[英]how reference copy is handled in Objective-C?

对象图

[Instance A]
         tree
       /       \
      /         \
     /           \
    ↓             ↓
[Instance B]     [Instance C]
 apple              bug

实例A必须将副本引用到实例B实例C。

如果我保留或释放具有对其他两个实例的引用的实例A ,那么各种引用计数将如何处理?

当您保留或释放A时,仅其引用计数会更改。 B和C发生什么情况取决于您的模型和实现。

如果A“拥有”或需要保留B / C,则应在某个时候保留B / C(独立于保留A本身),并在释放A时释放它。

如果您没有实现A,则需要查看文档以查看其是否拥有B / C,或者需要显式保留并释放它们。

我检查了您原来的问题,不确定是不是您要的答案。 如果没有,请解释一下...

您不在乎保留计数 不,说实话你不会。 您只在乎A是否拥有B和C(或更准确地说,拥有B和C的所有权)。

因此,大概在某个地方,您可以使用一种方法来设置A的子代(可能是A的指定初始化程序)。 如果该方法保留了B和C,则A在不再需要所有权时必须释放B和/或C。 在两种情况下:

  1. 当B和/或C被新的孩子覆盖时
  2. 当A即将被释放时

话虽如此,回答您的问题:

如果保留A,则对B和C的保留计数没有影响。

如果释放A, 除非其他人都不拥有A的所有权, 否则它对B和C的保留数没有影响。在这种情况下,将调用A的dealloc,这将释放B和C。

当您调用对objectA的保留或释放时,持有objectA引用的对象将不会发生任何事情。 (除非您重写了这些方法。)(保留增加保留计数,释放减少保留计数)

在释放的情况下,如果保留计数变为0,则将调用dealloc并释放objectA。 您负责释放该类的已分配对象。 仍然保持对objectA的引用的其他对象成为悬空指针。

尊敬的达纳。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM