텍스트 변경→ NSTextStorage → NSLayoutManager → Generate glyphs → Position Glyphs → Draw Glyphs in View
이 방법으로는 커스텀 드로잉을 할 때 어디서 텍스트를 분리해야할 지 알기 어렵다. 예를 들어 아래 같은 걸 하고 싶다는 것이다.
새로운 렌더링 과정
NSTextElement(읽기 전용의 값 객체 기반, 추상객체): 텍스트 컨텐츠의 일부를 표현
NSTextContentManager(추상 객체): 텍스트 컨텐츠로부터 element를 제공한다.
실제 저장소의 wrapper 객체
커스텀 저장소를 구현하기 위해서는 서브클래싱해야 한다.
기본 구체 클래스는 NSTextContentStorage다. 기존 NSTextStorage를 저장소로 사용한다.
content를 변경하기 위해서는 Transaction 메소드로 변경 사항을 감싸야 한다. 이렇게 해야 TextKit2의 다른 부분들이 변경을 감지할 수 있다.
class NSTextContentManager {
func performEditingTransaction(_ transaction: () -> Void)
}
NSTextLayoutManager: 텍스트 레이아웃 프로세스를 조정한다.
NSTextLayoutFragment(읽기 전용의 값 객체 기반): 1개 이상의 TextElement의 레이아웃 정보