Ответ 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 сейчас довольно сильная.