Итак, мой вопрос двоякий:
Что именно повлечет за собой снижение производительности? (поэтому я знаю, чего мне следует избегать)
Насколько значительным является это снижение производительности? (так что я могу заранее угадать, какие части моей игры нужно будет написать на С в любом случае)
(моя база из реализаций Apple:)
в большинстве случаев самым большим штрафом является то, что каждый экземплярный метод (обмен сообщениями) является динамическим вызовом
стоимость этого звонка / сообщения примерно в 4 раза выше стоимости виртуального звонка на c ++.
эти вызовы не могут быть оптимизированы (если кто-то не делает хорошую реализацию для JIT / HotSpot), и методы, в отличие от c или c ++, могут не быть встроенными.
но это не просто обмен сообщениями:
ваши объекты будут пересчитаны. это означает: много блокировок и много индивидуальных, небольших выделений, плюс атомы для подсчета ссылок.
objc_msgSend и варианты (основа реализации обмена сообщениями во время выполнения) могут занимать, например, 10% только времени выполнения (крайние случаи реального мира).
это может также добавить к двоичному размеру.
Идиоматическое использование толкает его дальше от скорости c ++ или c во многих областях. (например, рассмотрите, как числа передаются / обрабатываются).
сколько это стоит вам, зависит от размера ваших методов. хороший сигнал означает, что ваши методы, как правило, будут короткими. Вы либо получите много сообщений и заметного веса (если это будет высокая производительность), либо будете подвергать риску свои проекты.
есть несколько других ошибок, как в приложениях реального времени.
int a = myobj-> a;
без различия по сравнению с с
... исключения ...
(iirc) В предыдущей модели исключений Apple использовалась дорогостоящая настройка, теперь они соответствуют принципам нулевых затрат в c ++ (оптимизировано так, что исключения не будут генерироваться регулярно, и они минимальны при вводе / настройке, но дорогие для выброса / отлова ).
если производительность действительно важна, я бы ее избегал и просто использовал с ++. у этого есть много особенностей и скорости. вам нужно будет немного поработать, чтобы получить некоторые удобства objc - большая часть этого заключается в доступных библиотеках, а не в языке.