2011-11-01 81 views
0

我有兩個問題:影響之前和之後保留和複製

  1. 我有一個對象,把它叫做X.當我給你保留的對象對象X([x retain]),然後改變數據X,X的保留數是多少?

  2. 我有兩個對象,一個& B.我首先做一個副本是這樣的:

    B = [A copy];

,現在我改變對象A的數據將在B數據也隨之變化,數據更改前後A & B的引用計數是多少?

+1

有一個關於保留和複製SO的問題.. – beryllium

回答

0

對於1,如果您的意思是更改數據(如x.foo = y),則保留計數不會更改。如果您的意思是x = y,則x的保留計數將更改爲y的保留計數,因爲x y。

2,

B的數據沒有變化。 B的保留計數爲1. A的保留計數與複製前相同。

這是正常情況,但我認爲一個對象可以選擇從副本返回一個非新對象。我認爲不可變的NSStrings會自己作爲副本返回,所以B的保留計數可能不是1,並且A的保留計數會增加1.基本上,你不能依賴它。

1
  1. 與更改數據之前相同。

  2. i。不,你複製後有兩個獨立的對象。改變一個不再影響另一個。二,與您更改數據之前相同。

請看看蘋果的Memory Management essay

+0

嗨喬希,謝謝你的答案。所以你說在分配保留給對象X之後,保留計數將是相同的,在更改數據之後保留計數也是相同的。 –

+0

你不「分配保留」任何東西。如果將消息'retain'發送給對象,則其保留計數將增加1.如果更改其某些ivars,則保留計數不受影響。 –