首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Objective-C 陣列嵌套添加時數值重複:每次迴圈需建立新的 NSMutableArray 實例

     編輯:程式設計綜合問答

若在迴圈中重複使用同一 NSMutableArray 實例並反覆 removeAllObjects,所有已加入外層陣列的參考都會指向同一個被清空的陣列,導致結果全為最後一組資料。

錯誤代碼

NSMutableArray *inner = [NSMutableArray array];
NSMutableArray *outer = [NSMutableArray array];
for (int i=0; i<3; i++) {
    for (int j=0; j<=i; j++) {
        [inner addObject:@(j)];
    }
    [outer addObject:inner]; // 每次加入同一實例
    [inner removeAllObjects]; // 清空導致 outer 內所有元素變空
}

修正:迴圈內建立新實例

NSMutableArray *outer = [NSMutableArray array];
for (int i=0; i<3; i++) {
    NSMutableArray *inner = [NSMutableArray array]; // 每次新建
    for (int j=0; j<=i; j++) {
        [inner addObject:@(j)];
    }
    [outer addObject:inner];
}
// outer = ( (0), (0,1), (0,1,2) )

記憶體管理

  • ARC 環境下自動管理,無需手動 release。
  • MRC 環境需在迴圈末尾 [inner release](若未加入外層陣列持有)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved