2010-03-19 3 views
1

내 코코아 맥 애플 리케이션에서 인스턴스 을 가지고 있는데이 인스턴스의 순서가없는 세트 B을 가지고 있으며 차례로 순서가 지정된 인스턴스 세트 C을 가지고 있습니다. C의 인스턴스는 하나의 인스턴스 BB에만 하나만 A이 될 수 있습니다.Cocoa 모델에서 모든 인스턴스를보다 효과적으로 가져 오는 방법은 무엇입니까?

A 인스턴스에서 순서가없는 모든 인스턴스 C을 사용하고 싶습니다. 매번 인스턴스 B을 열거 할 수는 있지만, 자주해야 할 일에 비용이 많이 드는 것처럼 보입니다. 그러나 나는 인스턴스 CA에 보관하는 것이 번거로워서 불일치의 원인이 될 수 있다고 걱정합니다. 예를 들어 이 A이 아닌 B에서 제거되면 걱정할 수 있습니다.

해결 방법 1 - 사용을 A에서 NSMutableSet 추가하거나 내가 B에서 동일한 작업을 수행 할 때마다 C 인스턴스를 제거합니다.

해결 방법 2 - 사용을 ANSHashTable를 참조하는 약한. CB에서 삭제하는 경우 A에 대해서도 사라집니다.

해결 방법 3-A에서 관찰 를 사용하여 키 값 B에 변경 내용을 추적하고 그에 따라 A에서 NSMutableSet를 업데이트합니다.

해결 방법 4 - 단순히 내가 필요할 때마다 세트를 생성하는 모든 인스턴스 B을 반복.

가장 좋은 방법은? 제가 놓친 다른 접근법이 있습니까?

NB 나는이 응용 프로그램에 CoreData를 사용하지 않으며 사용하지 않을 것입니다.

+0

코드를 프로파일 링 했습니까? 이것이 당신이 많은 시간을 보내는 곳이라는 것을 알고 있습니까? 최적화를 시도하기 전에 프로파일 링을해야합니다. –

+0

나는 그것을 모두 받아 들인다. C의 인스턴스는 모든 데이터 중에서 유일하다. – Vladimir

+0

아니요,이 코드는 아직 프로파일 링하지 않았습니다. 주로 설계 중이기 때문에 아직 프로파일 링이 많이 있습니다. 다른 사람들이 이것을 어떻게 구현했는지 묻는 것은 흔한 문제로 보입니다. 예, 'C'의 모든 인스턴스는 고유합니다. 미안하지만 분명하지 않다.논리적으로 'C'가 하나의'B'에있을 때 따라야합니다. –

답변

1
B 개체의 집합이 A 경우

, 각 B 객체가 C 개체의 집합을 가지고, 당신은 할 수 있습니다 :

NSSet * allCObjectsInA = [anAObject valueForKeyPath:@"[email protected]"]; 

이 당신이 방법을 통해 AB 개체에 액세스 할 수 있다고 가정한다 - (NSSet *) bObjects;B의 과 관련된 객체 -(NSSet *) cObjects;

+0

이 포인터를 가져 주셔서 감사합니다. 이러한 집합과 배열 연산자는 실제로 내가 간과 한 좋은 옵션입니다. 'B'는'C'의 배열을 가지고 있기 때문에 아마도'@ distinctUnionOfSets', 아마도'@ unionOfArrays'보다는 다른 연산자를 사용할 것입니다. –

+1

수정,'@unionOf ...'연산자는 배열이 아닌 배열에서만 사용할 수 있으므로'@ distinctUnionOfArrays'를 사용해야했습니다. 어쨌든이 깔끔한 해결책에 다시 한번 감사드립니다. –

0

코드를 최적화 할 필요가 없다면 캐싱을 신경 쓸 필요가 없습니다. 설정이 필요할 때마다 B의 모든 인스턴스를 열거하십시오.

관련 문제