2015-01-13 67 views
2

我希望不需要在这里使用NSMutableArray。我有一个包含10个元素的数组。我想改变索引4的值。有没有办法做到这一点,而不必使用NSMutableArray? NSMutableArray的问题是我们可以改变它的任何内容,包括它的大小。我不希望这个数组的大小发生意外更改。我只想将索引4中的值从22改为25.我该怎么做?做array[4]=25不起作用。在NSArray的特定索引更新值

+0

您不能更改不可变数组。所以是的,至少暂时需要一个可变数组。 – rmaddy

+1

当然,如果对象本身是可变的,你可以改变从数组中寻址的**对象**的值。 –

回答

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

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

0

如果你不想使用NSMutableArray那么一个普通的旧C数组呢?例如:

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

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

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

HTH