Objective-C, разница производительности .m / .mm? - PullRequest
29 голосов
/ 23 февраля 2010

Я склонен использовать расширение .mm по умолчанию при создании новых классов, чтобы впоследствии я мог использовать ObjC ++, если мне это потребуется.

Есть ли какой-либо недостаток в этом? Когда бы вы предпочли .m? .m компилируется в более быстрый исполняемый файл (поскольку C обычно быстрее, чем C ++)?

Ответы [ 2 ]

44 голосов
/ 23 февраля 2010

Основным недостатком использования .mm над .m для "нормального" Objective-C является то, что время компиляции значительно выше для Objective-C ++. Это потому, что компилятор C ++ занимает больше времени, чем компилятор C. С Xcode 3.2 и выше, код Objective C может использовать цепочку инструментов Clang , чтобы значительно ускорить время компиляции Objective C / C. Поскольку Clang еще не поддерживает Objective-C ++ / C ++, это еще больше увеличивает разрыв во времени компиляции между ними.

Лучшая стратегия - использовать .m по умолчанию. Если вам понадобится использовать Objective-C ++ на более поздних этапах разработки, нет никакого вреда в переименовании файла для использования расширения .mm. Если вы это сделаете из XCode, проект будет автоматически обновлен для использования недавно названного файла.

Конечно, все стандартные предупреждения применяются, когда вы пытаетесь сравнить производительность Objective-C ++ и Objective-C во время выполнения. Поскольку Objective-C ++ является надмножеством C ++, а Objective-C - надмножеством C, вы имеете дело с двумя разными языками, каждый из которых имеет компромисс между производительностью и временем выполнения. Учитывая, что вы вообще используете Objective-X, вы, скорее всего, пишете приложение уровня пользователя (не приложение уровня системы), и разница в производительности между C и C ++, вероятно, будет полностью определяться вашими способностями кодировать эффективные алгоритмы каждый язык. Если вы разработчик на C ++, вы, вероятно, будете писать код лучше, чем на C и наоборот. Поэтому, как всегда, используйте соответствующий инструмент для работы.

Для справки, вас также может заинтересовать этот ответ: C против C ++ (Objective-C против Objective-C ++) для iPhone

ОБНОВЛЕНИЕ 17 февраля 2012 г. Начиная с Xcode 4.0 (с LLVM 3.0), Clang поддерживает Objective-C ++. Даже поддержка C ++ 11 сейчас достаточно сильна.

8 голосов
/ 23 февраля 2010

Если вы используете только функции C, файлы .mm должны генерировать код, который работает очень похоже на .m

Также нет недостатка в переименовании файла из .m в .mm позже, когда вам нужны возможности C ++

...