[英]Objective-C - How to add objects in 2d NSMutableArrays
NSMutableArray * insideArray = [[NSMutableArray alloc] init]; NSMutableArray * outsideArray = [[NSMutableArray alloc] init]; [insideArray addObject:@“ Hello 1”]; [insideArray addObject:@“ Hello 2”]; [outsideArray addObject:insideArray]; [insideArray removeAllObjects]; [insideArray addObject:@“ Hello 3”]; [insideArray addObject:@“ Hello 4”]; [outsideArray addObject:insideArray]; 當前輸出是
array(
(
"Hello 3",
"Hello 4"
),
(
"Hello 3",
"Hello 4"
)
)
我需要一種方法來獲得輸出
array(
(
"Hello 1",
"Hello 2"
),
(
"Hello 3",
"Hello 4"
)
)
有沒有人有解決方案,或者可以看到我哪里出問題了? 謝謝
您實際上只是在這里創建兩個數組。 您要創建“外部”數組,然后將兩個引用添加到同一內部數組。 輸出時,您會看到這兩個內部數組引用的是完全相同的東西。
您需要在此處創建多個內部數組,因為您希望它們保存不同的值集。
這里的關鍵點是數組只是對象引用,清空和重新填充數組不會創建一個新的數組。 它只會更改您已經擁有的一個。
您正在為兩個子數組使用相同的NSMutableArray。 您需要使用兩個不同的對象。 具體來說,代替
[insideArray removeAllObjects];
代替使用
[insideArray release];
insideArray = [NSMutableArray array];
尋求最快的解決方案。
我認為問題在於,當您將一個對象添加到數組中時,該數組不會復制給定的對象,它僅保留對其的引用,並將保留計數增加一
好吧,您要從insideArray刪除“ Hello 1”和“ Hello 2”,這是outsideArray持有的實際對象。 換句話說,outsideArray不了解insideArray的內容。
從內存管理的角度考慮它。 每次鍵入“ insideArray”時,計算機都會看到一個引用,指向單個內存點。 而“ [outsideArray addObject:insideArray];” 確實在outsideArray中放置了對insideArray對象的引用,insideArray仍指向內存中的同一位置。
嘗試實例化一個新對象,並將其放置在outsideArray中。 更改:[outsideArray addObject:insideArray];
讀取:[outsideArray addObject:[NSMutableArray arrayWithArray:insideArray]];
那應該是最簡單的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.