在NSArray中更新特定索引处的值

时间:2015-01-13 18:10:51

标签: ios objective-c arrays nsarray

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

唯一的方法是创建一个新的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项。

答案 2 :(得分:0)

如果您不想使用NSMutableArray普通旧C阵列怎么样? E.g:

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

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

如果你真的想要一个固定大小的NSArray / NSMutableArray你可以通过自己继承这些类型来做到这一点 - 继承NSArray只需要实现两个方法,你可以使用底层C实际存储的数组或NSMutableArray

HTH