2015-01-13 1 views
2

여기 NSMutableArray를 사용할 필요가 없길 바래요. 10 개의 요소가있는 배열이 있습니다. 인덱스 4에서 값을 변경하고 싶습니다. NSMutableArray를 사용하지 않고이 작업을 수행 할 수있는 방법이 있습니까? 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