2009-05-08 6 views
15

나는 루프가 for입니다. 그 루프 안에서 나는 어떤 물건으로 NSArray을 채우고 싶다. 그러나 나는 그렇게 할 수있는 어떤 방법도 보지 못했다. 나는 얼마나 많은 물건이 있는지를 미리 안다. 나는 을 피하기를 원합니다. 어떤 사람들은 매우 큰 오버 헤드와 성능 브레이크가 NSArray에 비해 있다고 말했기 때문입니다.NSArray를 어떻게 동적으로 채울 수 있습니까?

나는 이런 식으로 뭔가있어 :

NSArray *returnArray = [[NSArray alloc] init]; 
for (imageName in imageArray) { 
    UIImage *image = [UIImage imageNamed:imageName]; 
    //Now, here I'd like to add that image to the array... 
} 

내가 NSArray에 대한 설명서에 모습을하지만, 내가 어떻게 거기에 될 방법 많은 요소 지정합니까? 아니면 실제로 NSMutableArray을 사용해야합니까?

+0

지금 이걸 살펴볼 시간이 없지만 NSMutableArray를 먼저 작성한 다음이 메소드를 사용하여 변경 불가능한 버전을 가져올 필요가 있습니까? 단순히 변경 불가능한 인터페이스와 속도 향상을 제공하지 않으면 (예 : 변경 가능과 동일한 기본 구현 일 수 있음), 한 번해볼 가치가 있는지 여부는 확실하지 않습니다. 지금까지 Apple 문서가 진흙으로 분명하다는 것을 기억합니다. – frankodwyer

+5

성능이 좋지 않다고 말하는 사람들의 말을 듣지 마십시오! NSMutableArray는 Objective-C의 핵심 부분이며 고도로 최적화되어 있으므로이를 피할 이유가 없습니다! –

답변

28

예, 당신은 NSMutableArray를 사용할 필요가 가변 배열을 채운 후에는 언제나 정적 배열을 만들 수 있습니다. 성능에 문제가 발생했는지 여부는 이후에 NSMutableArray을 사용하거나 단순히 생성하여 발생하는지 여부에 따라 다릅니다.

제 생각 엔 이것이 앱에서 성능 병목 현상이되지는 않을 것입니다.

+0

감사합니다. 변수의 데이터 구조가 NSMutableArray가 아닌 NSArray 유형인지 확인 하시겠습니까? 또는 그것들은 상호 교환 가능합니까? – Thanks

+0

NSMutableArray는 NSArray의 서브 클래스이므로 안전합니다. – Alnitak

+0

그래, 깜빡했다. 감사! 그것은 또 다른 질문을 제기합니다;) – Thanks

3

NSMutableArray을 사용하기에 좋은 시간이 맞습니까?

나는 당신이 그것을 피하기를 원한다는 것을 알고 있지만 때로는 이런 것들에 대한 이유가 있습니다.

4

추가하려면 돌연변이가 있고 NSArray은 불변이므로 NSMutableArray을 사용해야합니다.

당신은 나중에 NSArray (see here for a discussion)로 채워 NSMutableArray을 만들 수 있지만, 당신은 곧 정규 오래된 NSArray 언제 항목을 추가하지 않습니다. 이 경우, 당신은 당신에게 성능 저하의 원인이 입니다NSMutableArray을 알고 난 단지 최적화 권합니다

2

고정 선언하지만 -

int count = [imageArray count]; 
NSMutableArray *returnArray = [[NSMutableArray alloc] initWithCapacity:count]; 
for (imageName in imageArray) { 
    UIImage *image = [UIImage imageNamed:imageName]; 
    [returnArray addObject: image]; 
    ... 
} 

편집 :

+0

http://stackoverflow.com/questions/1746204/을 참조하십시오. – nschum

관련 문제