Мне было любопытно на предмет этого так, я записал следующую тестовую программу и скомпилировал ее с g ++ версия 4.1.2.
include <iostream>
#include <string>
using namespace std;
class test
{
public:
test(const char *name)
: _name(name)
{
cout << _name << " created" << endl;
}
~test()
{
cout << _name << " destroyed" << endl;
}
string _name;
};
test t("global variable");
void f()
{
static test t("static variable");
test t2("Local variable");
cout << "Function executed" << endl;
}
int main()
{
test t("local to main");
cout << "Program start" << endl;
f();
cout << "Program end" << endl;
return 0;
}
, результаты не были тем, что я ожидал. Конструктора для статического объекта не вызывали до первого раза была вызвана функция. Вот вывод:
global variable created
local to main created
Program start
static variable created
Local variable created
Function executed
Local variable destroyed
Program end
local to main destroyed
static variable destroyed
global variable destroyed
Они не совсем разные языки. Objective-C ++ - это просто Objective-C с немного ограниченной поддержкой включения кода C ++. Objective-C - стандартный диалект, но если вам нужно работать с C ++, нет причин не использовать его. AFAIK, самая большая практическая разница (помимо разрешения использования разных библиотек) заключается в том, что Objective-C ++, похоже, компилируется немного медленнее.
Если вы пишете переносимую библиотеку и не нуждаетесь в специальных языковых функциях для нее, почему бы не написать ее на чистом C? Его можно легко вызвать из C ++, C, Objective-C и многих, многих других языков.
Если вам требуются определенные языковые функции, которых нет в C, вы должны сообщить нам, какие они есть, чтобы вы могли стать лучше совет =)
На самом деле вы можете использовать C или C ++ в Xcode. Причина использования Objective C для Cocoa и Cocoa Touch (iphone) заключается в простоте использования и в том, как он решает многие проблемы с памятью, с которыми вы могли бы столкнуться самостоятельно. Objective C и Xcode работают как мечта. Я также порекомендовал бы проверить http://www.kevincallahan.org/software/accessorizer.html Accessorizer потрясающий и сокращает время разработки до нуля.
Сказав, что я не вижу проблем в написании функций / методов на C или C ++ и использовании их в рамках вашего проекта XCode. Только не ожидайте, что Objective C будет так же хорошо работать на других платформах. IDE для разработки Apple и Windows отличаются друг от друга, и у Microsoft есть хорошая привычка не делать вещи настолько совместимыми с другими средами (не только с Apple).
Я рад слышать, что кто-то пытается повторно использовать их код для других проектов :) в наши дни многие люди забывают создавать свои собственные библиотеки, и я понятия не имею, почему.
Надеюсь, это поможет. Привет, Мэтью
Вот ваше предостережение: потратьте сотню долларов на то, чтобы стать разработчиком, и запустить xcode IDE, с которой вы будете работать на Mac - это будет лучший способ для вас решить, поскольку очевидно что вы не совсем понимаете, как работает эта платформа.
Пожалуйста, не грубите всем, кто пытается вам помочь. Это сообщество построено на уважении. Люди здесь действительно помогают и заботятся, а таких мест в сети осталось немного.
Переходите на C или C ++ - я не вижу причин рекомендовать одно перед другим, не зная больше о ваших целях.
Что касается использования памяти, C ++ и C действительно требуют более дисциплинированного кодирования. С точки зрения скорости, C и C ++ практически в любом случае будут быстрее любого решения ObjC / ObjC ++. Я часто смешиваю свои приложения Objective C с кодом C и C ++ и всегда был доволен результатами. Как правильно сказал Джонатан, ObjectiveC ++ в основном является мостом для использования кода / библиотек C ++ в приложениях Objective C.
Вы можете свободно использовать объекты C ++ из Objective C ++. Однако вы НЕ можете использовать объекты Objective C / C ++ в C ++. Так что это дорога с односторонним движением. Чтобы преодолеть любые ограничения, налагаемые этим ограничением, просто оберните ваши объекты C ++ классами Objective C ++ там, где это необходимо.
Я считаю, что ваша информация неверна. Objective-C ++ - это надмножество C ++. Любой C ++ является законным Objective-C ++. Кроме того, вы можете смешивать код Objective-C и C ++ в файле Objective-C ++ (обычно .mm) и (с некоторыми ограничениями) смешивать переменные экземпляра классов Objective-C и C ++ в классе Objective-C ++. Objective-C ++ особенно полезен для взаимодействия между Objective-C и библиотекой C ++. Напишите свою кроссплатформенную библиотеку на C ++. Затем вы можете вызвать его из Objective-C ++ в приложении. Перечитайте Objective-C ++ раздел руководства по языку Objective-C для получения дополнительной информации.
Основным недостатком использования Objective-C ++ является увеличение времени компиляции (Objective-C ++ даже хуже, чем C ++ и компилятор Clang LLVM не t обрабатывать Objective-C ++ еще). Нет никакой разницы в производительности между Objective-C и Objective-C ++, за исключением различий в вызываемом коде (например, если вы лучший разработчик C ++, ваш C ++, вероятно, будет более эффективным, чем ваша библиотека C, и наоборот).
Если вы собираетесь использовать эту библиотеку на платформах, отличных от iPhone и Mac OS, вам следует использовать C ++. Если вы планируете переносить его только на Mac OS, то используйте Objective-C. Objective-C ++ - это просто способ интегрировать существующий код C ++ в проекты Objective-C. Таким образом, вы не стали бы писать в нем библиотеку. Однако вы можете использовать Objective-C ++ для использования этой библиотеки из проекта iPhone или Mac.