【问题标题】:Effect on object before and after retain & copy保留和复制前后对对象的影响
【发布时间】:2011-12-19 07:15:21
【问题描述】:

我有两个问题:

  1. 我有一个对象,称它为 X。当我将保留分配给对象 X ([x retain]),然后更改对象 X 中的数据时,X 的保留计数是多少?

  2. 我有两个对象,A 和 B。我首先做一个这样的副本:

    B = [A copy];

现在我更改了对象 A 中的数据。B 数据是否也会更改,数据更改前后 A 和 B 的引用计数是多少?

【问题讨论】:

  • 关于 SO 上的保留和复制有很多问题..

标签: objective-c copy retain retaincount


【解决方案1】:
  1. 与更改数据之前相同。

  2. 我。不,你复制后有两个独立的对象。更改一个不再影响另一个。
    ii.与您更改数据之前相同。

请查看 Apple 的 Memory Management essay

【讨论】:

  • 嗨乔希,谢谢你的回答。所以你说在将保留分配给对象 X 后,保留计数将相同,在更改数据后保留计数也将相同。
  • 你不会“分配保留”给任何东西。如果您将消息retain 发送给一个对象,它的保留计数会增加 1。如果您更改它的某些 ivars,则保留计数不受影响。
【解决方案2】:

对于 1,如果您的意思是更改 x.foo = y 之类的数据,则保留计数不会更改。如果您的意思是x = y,那么 x 的保留计数将更改为 y 的保留计数,因为 x y。

对于 2,

B的数据不变。 B的retain count为1,A的retain count和copy前一样。

这是正常情况,但我认为一个对象可以选择从副本中返回一个非新对象。我认为non-mutable NSStrings会自己作为副本返回,所以B的retain count可能不是1,A的retain count会加1。基本上,你不能依赖它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2018-07-24
    • 2019-10-07
    • 1970-01-01
    相关资源
    最近更新 更多