若在迴圈中重複使用同一 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) )
release。[inner release](若未加入外層陣列持有)。