2010-02-12 6 views
1

20 년 동안 C/C++를 프로그래밍 해 왔지만 objective-c 및 Coco에 익숙하지 않으며 NSMutableArray 및 NSArray의 성능에 대해 몇 가지 질문이 있습니다.NSMutableArray 및 NSArray의 성능 문제

stl 목록 컨테이너와 비슷한 컨테이너가 필요하지만 코코는 하나도 갖고 있지 않으며 MSMutableArray의 중간에서 요소를 삽입 및 제거하는 것이 느린 것처럼 보일 수 있지만 stl 벡터처럼 취급하는 것은 그다지 빠르지 않습니다. .

또한, MSMutableArray에만 저장 개체에 보인다, 그래서 간단한 데이터 유형 라인 INT의 추적을 유지하거나 플로트에 저장하는 객체 생성의 추가 오버 헤드를 초래할 수 있습니다.

나는 현재 게임을 쓰고 있어요 및 성능은 결정적인. 나는 항상 내 게임 엔진의 배짱이에 C++로 떨어질 수 있지만, 내가 좋아하는 목표에 대해서는 너무 많이있다. 나는 그것을 버리고 싶지 않다.

내가 사용해야하는 목적에 맞는 빠른 stl 컨테이너가 있습니까?

성능이 너무 느린 이유를 설명하기 위해 구현 방법에 대한 온라인 설명서가 있습니까?

감사합니다.

답변

2

NSMutableArray와 같은 Foundation 컬렉션 클래스는 특정 구현을 사용한다는 보장이 없으며 실제로 실제로 포함 된 항목 수만큼 속도를 최적화하기 위해 데이터 구조를 변경합니다. 더 많은 것을 here 읽을 수 있지만 근본적으로 기본 알고리즘에 대해서는 걱정하지 않습니다.

C에서 자체 데이터 구조를 만들거나 원하는 경우 Objective-C++ 경로로 이동할 수 있습니다. 그러면 NSNumber의 각 프리미티브를 래핑하는 메모리와 성능 오버 헤드가 절약됩니다. 물론, 성능 도구를 먼저 실행하여 문제가 실제로 어디에 있는지 확인하고 시간을 낭비하지 않는 것이 좋습니다.

+0

링크가 죽어있다. ( – Lewis42

0

성능에 대해 정말로 신경 쓰는 경우 Objective-C를 통해 Foundation 데이터 구조를 사용하지 않는 것이 좋습니다. 런타임 시스템은 컴파일 타임 최적화를위한 모든 기회를 없애기 때문에 항상 상자 프리미티브가 필요합니다.

Objective-C++을 사용하고 std::list<id>을 사용할 수 있습니다.

Objective-C를 사용해야하는 경우 유형이 포함 된 CHDataStructures을 참조하십시오.