更新 NSArray 中特定索引处的值

update value at specific index in NSArray

我希望在这里不需要使用 NSMutableArray。我有一个包含 10 个元素的数组。我想更改索引 4 处的值。有没有一种方法可以在不必使用 NSMutableArray 的情况下执行此操作? NSMutableArray 的问题是我们可以改变它的任何东西,包括它的大小。我不希望这个数组的大小意外改变。我只想将索引 4 处的值从 22 更改为 25。我该怎么做?做 array[4]=25 是行不通的。

NSArray *ar1 = @[@"1",@"2"];
NSMutableArray *ar1update = [ar1 mutableCopy];
ar1update[1] = @"Changed";
ar1 = [NSArray arrayWithArray:ar1update];

唯一的方法是创建一个新的 NSArray 并将指针更改为新的 NSArray。我可以举个例子...

在界面中:

@property (strong, nonatomic) NSArray *myArray;

实施中:

- (void) updateMyArray{
    NSMutableArray *myArrayMut = [self.myArray mutableCopy];
    myArrayMut[4] = @"new item";
    self.myArray = [myArrayMut copy];
}

所以基本上,您可以临时创建一个可变副本,进行所需的更改,然后制作一个不可变副本。获得不可变副本后,您可以将 myArray 指向新副本。只要您仅更改 updateMyArray 中的现有项目并且 myArray 开始时包含 10 个或更少的项目,您将永远无法拥有超过 10 个项目。

如果您不想使用 NSMutableArray 普通的旧 C 数组怎么样?例如:

int array[10];
...
array[4] = 25;

您可以在这样的数组中存储 Objective-C 个对象,ARC 将处理内存管理。

如果你真的想要一个固定大小的 NSArray/NSMutableArray 你可以通过自己对这些类型进行子类化来实现 - 子类化 NSArray 只需要实现两个方法,你可以使用一个底层 C 数组或 NSMutableArray 用于实际存储。

HTH