2013-03-26 64 views
0

所以我想知道,當我做
的Objective - C - 指針,當你將數組分配到另一個

NSMutableArray *arr1 = [[NSMutableArray alloc] init]; 
NSMutableArray *arr2 = [[NSMutableArray alloc] init]; 

[arr1 addobject:ob1]; 

arr2 = arr1; 

[self changeValue:[arr2 objectAtIndex:2]]; //function that will modify what is sent to it 


1)可我甚至nsmutablearrays之間做=會發生什麼情況到底發生了什麼?
2)如果我要訪問arr1中的對象,它會被修改嗎?
3)它有多深? - 如果我要從其他地方訪問該對象,是否會被修改?
4)我假設使用mutableCopy會返回一個全新的數組。
5)是否有模擬這種深度鏈接/連接?例如,如果我想將相同的對象分配給2個不同的數組,那麼如果我修改了一個,它會改變這兩個數組中的對象?
6)這個詞代表什麼?我不認爲它是連接/連接。

非常感謝
- 詹姆斯

+1

請減少每個帖子詢問的問題數量。 – duci9y 2013-03-26 18:32:51

+0

我通常同意不要一次提出太多問題的原則,但這些問題是如此交織在一起,我認爲他們確實屬於一起。在不同的問題中詢問他們每一個都會令人厭惡地重複。 – Chuck 2013-03-26 21:19:54

回答

6

我想你混淆對象和變量。您不會將一個對象分配給另一個;您將對象分配給變量。變量只是一種保持對象的方式,否則這些對象會在程序內存空間的某處浮動。兩個變量可以指向相同的對象,當發生這種情況時,是的,你會看到通過這兩個變量對象的變化,因爲它是相同的對象

當你做arr2 = arr1,你有arr2指向相同的數組arr1。所以如果你改變了arr1中的東西,你會在arr2中看到它嗎?是的,因爲arr2 arr1。這是同一個對象,只是稱爲兩個不同的名稱。

如果相反它是arr2 = [arr1 mutableCopy],是的,這將創建一個新的數組對象,所以這兩個變量將指向不同的對象。如果將一個對象添加到一個數組中,它不會奇蹟般地被添加到另一個數組中。但是這引發了一個問題:如果arr1包含一堆NSMutableStrings會怎麼樣?更改arr1中的一個字符串是否也會更改arr2中相應的字符串?是的,因爲即使數組本身是一個不同的對象,它仍然包含與原始數組相同的對象。

所以思考這個問題的方式不是兩個數組以某種方式連接或連接。你需要問的唯一問題是,「這些對象是我在兩個地方與同一個對象或不同的對象進行交互的嗎?」

+0

你是說,如果我做了arr2 = [arr1 mutableCopy],並且arr2具有所有nsmutablestring的,那麼我更改了arr2中的所有字符串...所有字符串都在arr1中更改了? – jgvb 2013-03-26 18:48:42

+0

@James:如果你自己修改字符串(比如在所有字符串的開頭添加「曾經有智慧的人」),那麼是的,因爲它們在兩個數組中都是相同的字符串。但是如果你從一個數組中取出一個字符串,那隻會發生在那個數組上 - 因爲這是對數組本身的改變,而不是字符串。 – Chuck 2013-03-26 19:05:08

+0

嗯。太危險了!那麼爲了得到完全獨立的副本,我需要對arr1中的所有對象執行遞歸mutableCopy調用? – jgvb 2013-03-26 19:09:34

相關問題