Objective-C,.m/.mm разница в характеристиках?

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

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

Ответ 1

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

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

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

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

UPDATE 17 февраля 2012 г. Как и Xcode 4.0 (с LLVM 3.0), Clang поддерживает Objective-C ++. Даже поддержка С++ 11 сейчас довольно сильная.

Ответ 2

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

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