0

我有两个问题:

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

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

    B = [A copy];

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

4

2 回答 2

1
  1. 与更改数据之前相同。

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

请查看 Apple 的内存管理文章

于 2011-11-01T07:39:00.370 回答
0

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

对于 2,

B的数据不变。B 的保留计数为 1。A 的保留计数与复制前相同。

这是正常情况,但我认为一个对象可以选择从副本中返回一个非新对象。我认为不可变的 NSStrings 会将自己作为副本返回,所以 B 的保留计数可能不是 1,而 A 的保留计数会增加 1。基本上,你不能依赖它。

于 2011-11-01T07:40:44.787 回答