我有两个问题:
我有一个对象,称它为 X。当我将保留分配给对象 X (
[x retain]
),然后更改对象 X 中的数据时,X 的保留计数是多少?我有两个对象,A 和 B。我首先做一个这样的副本:
B = [A copy];
现在我更改对象 A 中的数据。B 数据是否也会更改,数据更改前后 A 和 B 的引用计数是多少?
我有两个问题:
我有一个对象,称它为 X。当我将保留分配给对象 X ( [x retain]
),然后更改对象 X 中的数据时,X 的保留计数是多少?
我有两个对象,A 和 B。我首先做一个这样的副本:
B = [A copy];
现在我更改对象 A 中的数据。B 数据是否也会更改,数据更改前后 A 和 B 的引用计数是多少?
与更改数据之前相同。
一世。不,你复制后有两个独立的对象。改变一个不再影响另一个。
ii. 与您更改数据之前的情况相同。
请查看 Apple 的内存管理文章。
对于 1,如果您的意思是更改数据x.foo = y
,则保留计数不会更改。如果您的意思是x = y
,那么 x 的保留计数将更改为 y 的保留计数,因为 x是y。
对于 2,
B的数据不变。B 的保留计数为 1。A 的保留计数与复制前相同。
这是正常情况,但我认为一个对象可以选择从副本中返回一个非新对象。我认为不可变的 NSStrings 会将自己作为副本返回,所以 B 的保留计数可能不是 1,而 A 的保留计数会增加 1。基本上,你不能依赖它。