簡體   English   中英

Objective-C-如何在2D NSMutableArrays中添加對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM