Высокоэффективная цель C Альтернативы выходу коммутатора для объектов

У меня есть функция, которую я хотел бы использовать в аргументах NSString и int, а затем использовать оператор switch, чтобы возвращать вычисленное значение, например, при умножении int на некоторую константу, в зависимости от того, что поставляется NSString.

Очевидно, что оператор switch не работает для объектов в Objective-C. Итак, какова самая быстрая альтернатива? Это выражения if-else? Или есть более элегантный метод?

ИЗМЕНИТЬ

Причина, по которой я забочусь о производительности, заключается в том, что я изменяю элементы пользовательского интерфейса, которые пользователь наблюдает в качестве конечного результата этих вычислений, и я не хочу, чтобы это чувствовало себя вялым.

Ответ 1

Не оптимизируйте преждевременно. Просто создайте NSDictionary, который отображает каждую строку в свой множитель. Тогда посмотрите, достаточно ли это.

Если вам нужно выполнить другую операцию в зависимости от строки, сделайте каждое значение в словаре блоком, который выполняет соответствующую операцию.

Ответ 2

Причина, по которой я забочусь о производительности, заключается в том, что я изменяю пользовательский интерфейс элементы, которые пользователь наблюдает как конечный результат этих и я не хочу, чтобы это было вяло.

Итак... вы делаете кучу графических интерфейсов, которые включают в себя повторную компоновку и повторное рисование кучи вещей, и вы беспокоитесь о производительности инструкции if/else?

Графические операции в приложениях являются огромными потребителями циклов процессора. Заказы большего количества циклов будут потребляться во время рисования в ответ на графическое изменение по сравнению, например, с вызовом objectForKey: и вызовом hash (что и подразумевает поиск в словаре).

Измерьте производительность вашего приложения. Выясните, почему он вялый. Затем исправьте проблему.

Первым шагом будет использование инструмента выборки CPU, чтобы увидеть, куда идут эти циклы.

Если это не помогает, используйте один из различных инструментов анализа графики, чтобы увидеть, является ли это вашим узким местом.

Также легко может быть, что вы делаете что-то несколько раз, что нужно делать только один раз; возможно, ваш код отслеживания взаимодействия с пользователем приводит к повторному перераспределению пользовательского интерфейса, когда его нужно выполнить только один раз (я просто исправил именно такую ​​проблему с производительностью в приложении, над которым я работаю).