2010-07-21 2 views

ответ

5

ответ Чака вполне верно, насколько уведомлений против KVO идет, но я хотел бы расширить на «привязок КВО + КВЦ + ...» часть он упомянул, потому что это, где реальная боль в задница может быть. Кодирование ключевого значения кажется, что это более важное соображение здесь, поскольку вы не можете использовать Bindings без него. Если вы беспокоитесь о производительности по уважительным причинам, вы бы хорошо заметили, что может потребоваться дорогостоящее использование KVC.

Я бы сказал, что любые обстоятельства, требующие интенсивного запроса в результате одного действия (пример: задание нескольких тысяч объектов для результатов нескольких путей по каждому из них), будут индикатором, который вы, возможно, захотите избежать KVC (и привязки по расширению). Особенно с длинными ключевыми дорожками (-valueForKeyPath: vs. -valueForKey:).

Я столкнулся с этим сам, и теперь я стараюсь устранить эту часть моей архитектуры. Относительно небольшая стоимость кодирования ключевых значений может серьезно увеличиться, когда вы запрашиваете 16 000 объектов для результата из полдюжины длинных путей ключа в результате нажатия кнопки (даже с NSOperation/Queue). Разница между использованием KVC и хорошими старомодными вызовами [[сообщение сообщения об объекте]] может означать разницу между несколькими секундами и временем в течение минуты или двух на больших рабочих местах. Для меня тот же самый запрос, вызывающий аксессуры напрямую (например, [имя параметра] или [[variable variable] name]), представляет примерно 500-процентное увеличение скорости. Конечно, моя довольно сложная модель данных с большим объемом данных для типичного документа.

С другой стороны, если многие отдельные действия вашего приложения влияют на один или несколько объектов, и в основном являются ключевыми значениями, ориентированными на наблюдение (т. Е. Меняют фамилию и обновляют ее сразу на нескольких взглядах), его простота может быть сродни магии.

В итоге: если ваше приложение запросы/обновления больших объемов данных, вы могли бы сделать лучше, чтобы избежать KVC и привязок для запроса/обновления части из-за KVC, а не из-за KVO.

5

На OS X это вообще не имеет значения. Они все легкие. Сам Apple полагается на нее, и поэтому реализации сильно оптимизированы. Я бы написал код так, чтобы он был максимально читабельным и только оптимизировал потребление скорости/ресурсов, когда это необходимо.

Еще один момент в том, что Apple часто меняет реализацию по версии ОС. Таким образом, относительная стоимость (скорость, потребление ресурсов и т. Д.) Различных технологий часто изменяется. То, что можно найти в сети, может часто устаревать. Сам Apple подчеркивает, что никогда не предполагать, что быстрее и легче, а вместо этого использовать профайлер (инструменты и т. Д.), Чтобы самостоятельно измерить узкое место.

2

Это не разные варианты. KVO - особый случай уведомлений. Привязки KVO + KVC + несколько классов клея.

Смежные вопросы