Привет xon1c, код выглядит хорошо. В целом, невозможно оптимизировать без измерения производительности в конкретных случаях.
Например, предположим, что приведенный выше код вызывается только один раз. Он рисует картинку в виде и не нуждается в перерисовке. Скажем, приведенный выше код занимает 50 миллисекунд для запуска. Вы можете переписать его в openGL и выполнить каждую оптимизацию под солнцем, и сократить это время до 20 миллисекунд, а реально сэкономленные 30 миллисекунд не будут иметь никакого значения ни для кого, и вы просто потратили свое время и добавили массу кода раздувание, которое будет труднее поддерживать.
Однако, если приведенный выше код вызывается 50 раз в секунду и в большинстве случаев он рисует одну и ту же вещь, вы можете существенно оптимизировать его.
Когда дело доходит до рисования, лучший способ оптимизации состоит в том, чтобы устранить ненужные рисунки.
Каждый раз, когда вы рисуете, вы воссоздаете NSBezierPaths - они всегда разные? Возможно, вы захотите сохранить список путей NSBezier для рисования, синхронизировать его с вашей моделью и сохранять рисование только для рисования путей.
Вы рисуете в тех областях вашего вида, которые не нуждаются в перерисовке? Аргумент для рисования - это область представления, которую необходимо перерисовать - вы можете проверить это (или getRectsBeingDrawn: count :), но в вашем случае вы знаете, что необходимо перерисовать все представление.
Если сами пути не меняются часто, но вид нужно часто перерисовывать - например, когда формы путей не меняются, но их положение анимируется и они перекрываются по-разному, вы можете нарисовать пути к изображениям (текстуры), а затем внутри drawrect вы бы нарисовали текстуру к виду вместо того, чтобы рисовать путь к виду. Это может быть быстрее, потому что текстура создается только один раз и загружается в видеопамять, которая быстрее выводится на экран. Вы должны взглянуть на Core Animation , если это то, что вам нужно сделать.
Если вы обнаружите, что рисование путей слишком медленное, вы можете посмотреть на CGPath
Так что, в целом, это действительно зависит от того, что вы делаете. Лучший совет, как и всегда, не увлекаться преждевременной оптимизацией. Если ваше приложение на самом деле не слишком медленное для ваших пользователей, ваш код просто в порядке.