2013-12-24 3 views
0

나는 방법을 가지고확인 존재

- (BOOL)isLockedDueToSamples 
{ 
    if ([self.samples count] > 0) 
    { 
     NSPredicate* p = [NSPredicate predicateWithFormat:@"appraised == YES OR analysed == YES"]; 
     if ([[self.samples filteredSetUsingPredicate:p] count] > 0) 
      return YES; 
    } 
    return NO; 
} 
이 방법은 꽤 자주 호출 할 필요가 있지만, self.samples는 1500까지 가능하기 때문에 매우 느리다

가 확인하는 방법이 있나요 전체 집합을 필터링하지 않고도 조건부와 일치하는 집합 요소가 있는지?

편집 :

내가 빨리처럼 약간 방법을 관리했습니다이

- (BOOL)isLockedDueToSamples 
{ 
    if ([self.samples count] > 0) 
    { 
     for (Sample *sample in self.samples) 
     { 
      if (sample.appraised || sample.analysed) 
      { 
       return YES; 
      } 
     } 
    } 
    return NO; 
} 
+0

당신은 objectsPassingTest :를 시도해 볼 수 있습니다. 그러나 나는 당신의 루프보다 더 빠를 것이라고 생각하지 않습니다. – rdelmar

답변

0

성능에 문제가있는 경우, 당신은 비동기 적으로 필터링을 수행하거나 NSSetobjectsPassingTest: 방법을 사용할 수 있습니다, 그것을 블록을 통과하기에 테스트 및 정지/만약 당신이 긍정적 인 테스트가 발생할 때

- (BOOL)isLockedDueToSamples 
{ 
    NSSet* matches = [self.samples objectsPassingTest:^(id sample, BOOL* stop){ 
     if (sample.appraised || sample.analysed) { 
      *stop = YES; 
      return YES; 
     } 
    }]; 

    return [matches count] > 0; 
} 

편집 :

그러나 이것은 for 루프보다 빠르다고 생각하지 않습니다.