2010-07-19 7 views
3

NSDictionary에 모든 데이터 멤버를 저장해야하는 상황에서 구조체 (사용자 정의 유형 또는 스칼라 즉 CGPoint)를 내 래퍼에 배치하는 것이 더 적합합니까? NSValue), 멤버를 얻거나 설정할 때마다 인코딩/디코딩 오버 헤드를 피할 수 있습니까?성능 - NSValue 대 컨테이너 객체의 구조체

큰 구조체 (16 개의 부동 소수점)의 경우 비용 절감이 중요합니다. 하지만 심지어 CGPoint으로 복사와 인코딩/디코딩 시간을 4 바이트 절약 할 수 있습니다.

답변

3

특정 사례에 대해서 측정하지 않는 이유는 무엇입니까? 그것은 그것을 발견 할 수있는 유일한 방법입니다.

두 옵션은 따라 value callbacks를 설정하여 일반 구조체에 대한 포인터로 CFDictionary를 들여다 보거나 (당신은 그 C++에 혼합 괜찮다면) 스핀에 대한 C++ std::map/std::tr1::unordered_map 걸릴 수 있습니다 충분하지 않은 경우.

+1

CFDictionary가 답이 될 수 있습니다. – Morrowless

1

글쎄, NSDictionary 타입은 객체를 멤버로 요구하기 때문에 NSDictionary에 구조체를 저장할 수 없습니다. 그것을 컨테이너 객체로 포장해야합니다.

+0

네,하지만 NSValue와 간단한 컨테이너 객체 사이에 있습니다. – Morrowless

3

실제로 더 나아갈 수도 있습니다 : 구조체를 완전히 포기하고 모델 개체로 만듭니다. 그런 다음 논리 (예 : 계산 된 속성)를 논리에 통합하고 관련 형식으로 자체를 인코딩하고 디코딩 할 수있을뿐만 아니라 컬렉션에 넣을 수 있습니다.