В Quartz / Core Graphics непрозрачные канаты быстрее составляются, чем непрозрачные канаты.
Но непрозрачное окно означает, что вам нужно нарисовать прямоугольник, и все, что вы не заполните, будет черным.
Если вы хотите, чтобы пользовательское окно не было прямоугольником с острыми краями, вы должны установить окно как непрозрачное.
Во всяком случае, это почти наверняка, а не ваше основное узкое место.
Во-первых, нужно перестать делать так много вещей в drawRect:
Сделайте это NSBezierPath свойством.
Заменяйте его только тогда, когда прямоугольник действительно меняет размер.
Делайте это только в viewWillDraw: или в более ранней точке.
Может быть, одно из представлений или окон изменяет размер NSNotifications или метод делегата.
В drawRect: вы должны делать только рисование на самом деле, насколько это возможно.
Вы должны перерисовывать только то, что вам нужно, насколько это возможно.
Это все еще мало, и, вероятно, не ваше узкое место.
Вам нужно будет изучить чертеж во ВСЕХ видах в вашем окне.
Ваше окно действительно является корневым CGContext (контекст рисования), к которому вы получаете доступ в OS X. Все в вашем контексте - это все ваши подпредставления.
Каждое подпредставление является потенциальным узким местом рисования.
Рисунок вида OpenGL при изменении размера окна в реальном времени звучит как основной кандидат.
Вы можете регулировать частоту кадров или что-то во время изменения размера вида или окна.
Это должно стать немного острее.
Кроме того, из классов NSWindow и NSView вы заметите, что отсутствие рисования при изменении размера в реальном времени является выигрышем в производительности.
См. Документацию класса NSView и, в частности, методы, указанные в разделе Управление изменением размера в реальном времени
- inLiveResize
- preservesContentDuringLiveResize
- getRectsExposedDuringLiveResize: Кол-во:
- rectPreservedDuringLiveResize
- viewWillStartLiveResize
- viewDidEndLiveResize
Эти последние два выглядят как отличное место для небольшого сокращения рисунка,