drawRect - повторное использование NSBezierPath - PullRequest
2 голосов
/ 14 февраля 2010

Я учусь технике рисования какао. Я создаю два объекта NSBezierPath из NSRects в моем методе drawRect, один из которых никогда не изменяется, а другой изменяет ширину в зависимости от того, что происходит.

Так что, по всей вероятности, мой drawRect вызывается много раз, но кажется неправильным каждый раз воссоздавать два объекта NSBezierPath, лучше будет просто обновить вторую ширину NSBezierPath (или обновить его NSRect).

Могу ли я сделать это? Я попытался создать первый NSBezierPath в методе initWithFrame, но, похоже, это вызвало проблему.

1 Ответ

1 голос
/ 14 февраля 2010

Пусть представление создает оба пути Безье в своем методе initWithFrame: и (если вы не используете GC) освобождаете их в dealloc.

Для пути гибкого размера drawRect: должен определить правильную ширину и получить текущую ширину пути из границ пути , затем использовать аффинное преобразование для масштабирования путь по соответствующему фактору. Это позволит вам повторно использовать одни и те же два объекта пути в течение всего времени существования представления.

Тем не менее, как говорится в пословице, преждевременная оптимизация - корень всего зла. Вам не стоит беспокоиться об этом, пока вы не обнаружите, что приложение работает медленно, запустили его под Shark или Instruments и не доказали, что высокая текучесть этих объектов является реальной проблемой. Пусть чистый код будет вашим приоритетом до тех пор, пока это не будет необходимо.

...