2011-04-22 4 views
17

내가 가진이 상황IOS : NSMutableArray를 initWithCapacity

array = [[NSMutableArray alloc] initWithCapacity:4]; //in viewDidLoad 

if (index == 0){ 
    [array insertObject:object atIndex:0]; 
} 

if (index == 1){ 
    [array insertObject:object atIndex:1]; 
} 

if (index == 2){ 
    [array insertObject:object atIndex:2]; 
} 

if (index == 3){ 
    [array insertObject:object atIndex:3]; 
} 

하지만 객체 위해 삽입하면 내가이 순서대로 배열을 채우기 대신하는 경우, 모든 괜찮 : 0과 3 후에는 작동하지 않습니다 좋아, 왜?

+0

개체 인덱스를 4에 삽입하려고합니까? – saadnib

+0

아니요. 예를 들어 인덱스 0에 오브젝트를 삽입하고 인덱스 2에 삽입하려고 시도하지만 작동하지 않습니다. – CrazyDev

답변

49

용량이 4인데도 NSMutableArray의 인덱스 3에 개체를 삽입 할 수 없습니다. 변경 가능한 배열에는 개체가있는 개수만큼의 "셀"이 있습니다. 가변 배열에서 "빈 셀"을 원하면 [NSNull null] 개체를 사용해야합니다. 여기에는 데이터가 없음을 의미하는 특수 스텁 개체가 있습니다. C 스타일 int a[10]에서

NSMutableArray *array = [[NSMutableArray alloc] init]; 

for (NSInteger i = 0; i < 4; ++i) 
{ 
    [array addObject:[NSNull null]]; 
} 

[array replaceObjectAtIndex:0 withObject:object]; 
[array replaceObjectAtIndex:3 withObject:object]; 
-3

예를 들어 인덱스 0에 삽입 한 다음 색인 2에 삽입 할 수 없으면 스템 삽입을 0,1,2,3,4,5 ....., n으로 삽입해야합니다. 원하는 대상 할 ??? 당신의 문제는 무엇입니까 ???

배열을 생성 한 다음 항목을 0으로 초기화하고 그 뒤에 삽입 할 수 있습니다 !!! 나는 그것이 일할 것이다라고 생각한다! !!

+0

오브젝트에 순서대로 삽입하면 문제가 없습니다 ....하지만 삽입하고 싶다면 처음에 0 위치에있는 객체와 2 또는 3 위치에있는 객체에 문제가 있습니다. 오름차순은 괜찮지 만 무작위로 ... 이해 하겠니? – CrazyDev

10

크기 (10)의 배열을 생성하고 당신은 임의의 순서로 90에서 모든 인덱스에 액세스 할 수 있습니다. 그러나 initWithCapacity 또는 arrayWithCapacity의 경우에는 그렇지 않습니다. 기본 시스템이 성능을 향상시키는 데 사용할 수 있다는 힌트 일뿐입니다. 즉, 순서가 맞지 않아 삽입 할 수 없습니다. 크기가 n 인 배열을 변경할 수있는 경우 인덱스 0에서 n까지, 0에서 n-1까지는 기존 위치에 삽입하고 끝 위치에 삽입하려면 n에서만 삽입 할 수 있습니다. 그래서 0, 1, 2, 3이 유효합니다. 그러나 0, 3 또는 1,2 순서는 유효하지 않습니다.

0

임의의 인덱스에 삽입 할 수 없습니다. 이렇게하려면 먼저 null 개체로 배열을 초기화 한 다음 replaceObjectAtIndex를 호출하십시오.