2015-01-13 93 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