2012-06-09 2 views
4

iOS 앱에서 ARC를 사용하고 있습니다. 알고리즘을 몹시 순진하고 낭비적인 시간의 77 %가 objc_retainobjc_release에 머물러 있다고해도 아래의 방법을 프로파일 링했습니다. 나는 그것이 NSArray에서 유닛을 가져 오는 라인까지 내려야한다고 생각하고 ARC는 매번 오브젝트를 유지 한 다음 해제 할 때주의해야한다.ARC를 보유/해제하면 속도가 느려집니다

정보에 입각 한 조언을 찾고 있는데 어떻게 우아하게 고칠 수 있습니까?

-(CGFloat)getUncertaintyForUnits:(NSArray*)units Position:(MKMapPoint)position Zoom:(MKZoomScale)zoomScale { 

    CGFloat closest = MAXFLOAT; 

    for (int i = 0; i < [units count]; i++) { 
     Unit *units = (Unit*)[units objectAtIndex:i]; 

     CGFloat distance = [self distanceBetweenMapPoints:unit.mapPoint And:position]; 

     if (distance < closest) { 
      closest = distance; 
     } 
    } 

    CGFloat max = 100/zoomScale; 
    return (1. - closest/max) * 0.9; 
} 
+1

단지 참고 사항 : [명명 규칙] (http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html#//apple_ref/doc/uid/10000146i))는'distanceBetweenMapPoints : And :'는 꽤 나쁜 이름이라고 말할 것입니다. 'camelCase : forAllParameters :'입니다. '및 ... '은 특정 동작이 트리거 될 수 있음을 나타냅니다. 대신에 with ... :를 사용하라는 메시지가 표시됩니다. 당신의 경우에 가장 좋은 이름은 다음과 같습니다 :'distanceBetweenMapPoint : position :' – vikingosegundo

+0

고마워요, 다음 번에 이름 지정 규칙을 읽어 보겠습니다 :) –

답변

10

당신은 fast enumeration을 시도 할 수 :

for (Unit *unit in units) { 
    CGFloat distance = [self distanceBetweenMapPoints:unit.mapPoint And:position]; 
    if (distance < closest) { 
     closest = distance; 
    } 
} 

이 추가 피해야는 유지/출시, 전체 배열이 차단 빠른 열거한다.

  • 열거, 예를 들어, 상당히보다 효율적입니다 직접 NSEnumerator를 사용하여 :

    빠른 열거를 사용하여 몇 가지 장점이 있습니다.

  • 구문은 간결합니다.
  • 열거 형은 입니다. "열거 형"열거자는 열거 중 컬렉션을 수정하려고 시도하면 예외가 발생합니다.
+0

'getObjects : range :'? –

+2

빠른 열거는 일반적으로 getObjects : range :'보다 훨씬 빠르며 특히 단일 열거 형의 경우 더 빠릅니다. 'getObjects : range :'는 복사본을 만듭니다. 빠른 열거는하지 않습니다. –

+1

실제로. Fast enumeration은 Objective-C의 환상적인 기능으로, 컴파일러가 원하는 것을보다 많은 정보를 제공하여 작업을보다 잘 수행 할 수있게합니다. –

0

어떤 이유로 메모리 관리 객체를 필요로하지 않는 한 빠른 대안은 일반 C 배열 (또는 구조체의 배열)에 위치 포인트를 저장하는 것입니다.

목표 C는 일반적인 ANSI C의 상위 집합입니다. 때때로 OOP 수퍼 셋 구문의 이점은 개체 순환 메시징 및 내부 루프의 관리 비용을 능가하지 못합니다.

관련 문제