2011-08-06 4 views
5

다른 대행사 '부서'에 대다수 관계 '부서'가있는 엔티티 '직원'이 있다고 가정 해보십시오. Employee 객체의 인스턴스가 있고 부서 컬렉션이 현재 잘못 되었으면 부서 수를 계산하는 가장 효율적인 방법은 무엇입니까?일대 다 CoreData 관계 오류에서 'count'를 호출하면 콜렉션의 모든 객체가 메모리로 이동됩니까?

두 가지 명백한 옵션은 다음과 같습니다

2 [myEmployee.departments count];를 호출

1))에만 부서 내 직원 개체에 그의 일치하는 '직원'의 관계 포인트 객체를 다음 호출 반환하는 fetchRequest를 구축 countForFetchRequest:

메모리 사용과 별도로이 두 방법 중 하나가 무시할 수 없을 정도로 빠를 것입니다.

답변

0

relationshipKeyPathsForPrefetching이 없으면 관계를 가져 오지 않습니다.

그러나 최선의 방법은 솔루션을 항상 가장 직접적인 방법으로 구현하는 것이며, 나중에 성능 문제를 해결하는 것입니다. 인간은 성능 문제를 예측하는 데 악명이 높습니다.

매우 사용하기 쉬운 하나의 도구는 Xcode에 포함 된 Instruments입니다.

두 접근법을 모두 사용하여 테스트를 쉽게 수행 할 수 있으며 실제로 낯선 사람의 의견을 듣기보다는 실제로 수치를 비교할 수 있습니다.

0

첫 번째 : 관계가 호출 될 때 개체가 "오류"로로드되므로 성능이 매우 좋습니다.

둘째 : 당신이 countForFetchRequest 방법을 사용하는 경우, 요청은 다음과 같습니다

NSFetchRequest *f = Departament.fetchRequest; 

f.predicate = [NSPredicate predicateWithFormat:@"ANY employees = %@", employe.objectID]; 

그래서 CoreData이 직원을 찾기 위해 각 부서를 확인해야합니다. 연습에서는 더 느립니다.

  • 첫 번째 옵션을 사용합니다.
  • 술어가 오브젝트의 특성을 필요로하는 경우 상황이 달라 지므로 첫 번째 옵션에는 결함없이 전체 오브젝트가 필요합니다. 이 경우 countForFetchRequest를 사용하는 것이 좋지만 가장 좋은 옵션은 특정 경우를 비교하는 것입니다.