影响之前和之后保留和复制

问题描述:

我有两个问题:影响之前和之后保留和复制

  1. 我有一个对象,把它叫做X.当我给你保留的对象对象X([x retain]),然后改变数据X,X的保留数是多少?

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

    B = [A copy];

,现在我改变对象A的数据将在B数据也随之变化,数据更改前后A & B的引用计数是多少?

+1

有一个关于保留和复制SO的问题.. – beryllium

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

2,

B的数据没有变化。 B的保留计数为1. A的保留计数与复制前相同。

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

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

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

请看看苹果的Memory Management essay

+0

嗨乔希,谢谢你的答案。所以你说在分配保留给对象X之后,保留计数将是相同的,在更改数据之后保留计数也是相同的。 –

+0

你不“分配保留”任何东西。如果将消息'retain'发送给对象,则其保留计数将增加1.如果更改其某些ivars,则保留计数不受影响。 –