2016-09-07 27 views
0

我初始化2 NSMutableArrays即另一NSMutableArray中的值:的Objective-C:一個NSMutableArray中的變化值,自動改變分配給它

NSMutableArray *firstArray = [[NSMutableArray alloc] init]; 
NSMutableArray *secondArray = [[NSMutableArray alloc] init]; 

firstArray在它有一定的價值和secondArray中有一些值太。

然後我分配給firstArraysecondArray

firstArray = secondArray; 

現在,如果我做出firstArray一些變化也會影響secondArray。例如,如果我從firstArray替換或刪除特定索引處的值,那麼該值也將從secondArray中刪除。

那麼有沒有什麼辦法可以改變firstArray不會影響secondArray

+0

做了'firstArray = secondArray;'之後,你爲什麼期望與你所看到的不同的行爲?他們現在是相同的陣列。 – rmaddy

+0

是的,我知道我在做什麼,將第一個指針分配給另一個指針,但我不知道如何創建數組值的副本,這就是爲什麼我問這個問題讓我的問題更容易理解。 :) – Naqi

回答

2

當您設置firstArray = secondArray;你實際上是設置了指針爲相同的值,而不是將第一個數組中的項目設置爲與第二個數組中的項目相同。這意味着你已經使firstArraysecondArray完全相同的對象,而不是具有完全相同的值。如果您只想將第二個數組的副本放入第一個數組中,則只需指定該數組。

firstArray = [secondArray mutableCopy]; 
firstArray = [secondArray copy]; // non-mutable copy 
+0

謝謝Stonz2。你的解決方案正是我想要的。有一個小問題,即在將secondArray拷貝到firstArray中後,firstArray變爲NSArray而不是NSMutableArray。因此,如果我想在firstArray中進行任何更改(如調用replaceObjectAtIndex),則不會允許我這樣做,因爲它不再是NSMutableArray。因此,我的問題的確切解決方案是使secondArray的mutableCopy像這樣: firstArray = [secondArray mutableCopy]; – Naqi

0

嘗試初始化兩個數組這樣

NSMutableArray *firstArray = [[NSMutableArray alloc] init]; 

NSMutableArray *secondArray = [[NSMutableArray alloc] initWithArray:firstArray]; 

希望這有助於。

+0

它的工作原理。謝謝 – Naqi

2

事情是Objective-C中的NSArrayNSMutableArray是引用類型。所以,通過做firstArray = secondArray;你實際上說firstArray和secondArray是同一個對象。所以,無論你如何訪問它,想到firstArray指針或secondArray指針,你都會訪問完全相同的對象,從而進行修改。

我想你想達到什麼是你的價值觀從fristArray複製到secondArray,這是可以做到通過調用copymutableCopy

firstArray = [secondArray copy]; 
+0

哈 - 我們在30秒內發佈了幾乎相同的答案。 – Stonz2

+0

我認爲這兩個好的答案都可以通過一個關於指針被覆蓋後原始firstArray會發生什麼的句子來改善。即在ARC下,它將被釋放。 – danh

1

您所面臨的問題是,這兩個陣列的引用類型的不值,所以都指向相同的地址,因此,如果變更的話,會影響另一個的值。使用initWithArray:copyItems:初始化初始化第一個數組。

NSArray *firstArray = [[NSArray alloc] initWithArray:secondArray copyItems:YES]; 
相關問題