2009-05-03 2 views
0

iPhone 용 실시간 구문 형광펜을 사용하고 있는데 문자열을 취하고 구문 분석 한 다음 drawRect : 메서드에서 강조 표시하는 사용자 정의 UIView를 만들었습니다. 깜박이는 커서도 구현했습니다. 그러나 조금 느리게 시작되고 멀티 라인 프로세싱과 청크 프로세싱을 구현할 때 속도가 느려질 것이라고 생각합니다. 그러나, 내보기 컨트롤러에서 함수에 [formattedTextView setNeedsDisplayInRect:] 호출을 배치하고 [self performSelectorInBackground:@selector(updateDisplay) withObject:nil] 사용하여 별도의 스레드에서 호출하는 시도했다. 이제는 키보드가 더 잘 반응하지만 싱글 코어 프로세서에서 스레드를 잘못 사용하는 것처럼 보입니다.멀티 스레드 텍스트 처리의 비용/이점

이와 비슷한 문제가 있습니까? 당신이 자신을 지적

감사

답변

1

는 단일 프로세서 멀티 스레딩에 엄청난 성능 향상을 가져 오지하지만, 안정성과 복잡성 페널티 올 것이다.

에 - 더 - 플라이 구문 착색이 어려운 문제는, 최적화를 위해 possibilites와 박제되어

  • 하면 전체 텍스트 정규 표현식에의 무리를 적용하고 있습니까? (나쁜) 또는 ast와 같은 효율적인 데이터 구조에서 보유 할 텍스트를 구문 분석합니까?
  • 색칠 된 그림을 보이는 영역으로 제한하고 있습니까?
+0

많은 문자를 빠르게 연속해서 입력하면 지연이 발생했기 때문에 백그라운드 처리가 제거되었습니다. 다른 점은 - 현재 편집 가능한 행에 정규식을 적용하고 있습니다. - setNeedsDisplayInRect :를 호출하여 현재 줄만 업데이트합니다. 나머지 UIView는 계속 채색되어 있습니다. 감속의 주된 원인은 깜박이는 커서 (awakeFromNib에서 CABasicAnimation을 설정 한 CALayer)가이 애니메이션을 최적화 할 수있는 방법일까요? 또한 ast는 무엇입니까? 전에는 들어 본 적이 없지만 NSMutableArray를 사용하고 있습니다. – Kyle

0

난 당신이 키워드를 강조하고, 아니면 당신이 BNF 파서를 작성했습니다 실시간 구문 형광펜

에 있어요?

후자의 경우 스레드에서 실행하지 않는 것이 좋습니다. GUI는 단순히 지금까지 디코딩 된 모든 색칠을 표시합니다. 그렇게하면 즉석 업데이트가되지만 색칠이 지연됩니다.

+0

정규 표현식을 사용하여 키워드를 강조 표시하고 있지만 실제 파서는 좋지만 필자가 작성할 수 있는지는 잘 모르겠습니다. 감사합니다. 카일 – Kyle

+0

BNF 파서는 생각보다 훨씬 쉽습니다. 개념 개념의 도약이 필요합니다. 기본 개념을 두뇌에서 이해할 수 있어야합니다. 실제 코딩은 매우 간단합니다. –

+0

개념을 두뇌로 생각하는 데 도움이되는 코드/기사를 알고 있습니까? 구문 분석기는 단순한 키워드 강조 표시보다 훨씬 우수합니다. 감사 – Kyle