2010-04-11 5 views
2

selectSelector replaceCharactersInRange : withString :, setSelectedRange :, insertText :를 사용하여 별도의 스레드 (performSelectorOnMainThread : withObject : waitUntilDone 사용)에서 조작하는 서브 클래스 NSTextView가 있습니다. 나는 텍스트의 깜박임 현상을 경험하고 있으며, NSTextView가 각각의 모든 작업에 대한 디스플레이를 업데이트하므로 성능이 좋지 않습니다.깜박임을 처리하고 속도를 향상시키기 위해 NSTextView 업데이트를 제어합니다.

디스플레이가 업데이트되는 시점을 제어하는 ​​방법에 대한 제안 사항이 있으므로 실제로 필요할 때만 업데이트 할 수 있습니까? 나는 다양한 조합을 사용하여 시도했다. setNeedsDisplay : NO (메인과 백그라운드 스레드 모두에서, 내 업데이트 전과 후에) 무시되는 것처럼 보인다.

일부 통찰력을 제공 할 수있는 사람에게 미리 감사드립니다.

답변

3

뷰의 이벤트 관련 메서드를 직접 호출하는 대신 텍스트 뷰로 기본 NSTextStorage을 조작해야한다고 생각합니다. 이것은 Model-View-Controller 아키텍처의 아주 고전적인 예입니다. NSTextView이보기이고 NSTextStorage이 모델입니다. 가능할 때마다 모델을 직접 조작하고 컨트롤러/뷰 레이어가보기를 적절하게 업데이트하도록합니다.

+0

예. 코코아 텍스트 시스템은 고도로 최적화되어 있으므로 사용법에 따라 사용하면 좋은 성능을 얻을 수 있습니다. 이 경우,보기를 수정하기보다는'NSAttributedString'의 서브 클래스 인 근본적인'NSTextStorage' 객체를 수정하십시오. 이것은 쇠망 입히기 접근법입니다. –

+0

감사! 텍스트를 수정하는 방식의 최적화에 추가하여 NSTextStorage 객체를 사용하는 조합이 트릭을 만들었습니다. – stdout

관련 문제