C по сравнению с C++ (Objective C по сравнению с Objective C ++) для iPhone

Мне было любопытно на предмет этого так, я записал следующую тестовую программу и скомпилировал ее с 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
15
задан mxg 15 November 2009 в 17:15
поделиться

7 ответов

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

11
ответ дан 1 December 2019 в 00:02
поделиться

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

Если вам требуются определенные языковые функции, которых нет в C, вы должны сообщить нам, какие они есть, чтобы вы могли стать лучше совет =)

18
ответ дан 1 December 2019 в 00:02
поделиться

На самом деле вы можете использовать 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).

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

Надеюсь, это поможет. Привет, Мэтью

3
ответ дан 1 December 2019 в 00:02
поделиться

Вот ваше предостережение: потратьте сотню долларов на то, чтобы стать разработчиком, и запустить xcode IDE, с которой вы будете работать на Mac - это будет лучший способ для вас решить, поскольку очевидно что вы не совсем понимаете, как работает эта платформа.

Пожалуйста, не грубите всем, кто пытается вам помочь. Это сообщество построено на уважении. Люди здесь действительно помогают и заботятся, а таких мест в сети осталось немного.

3
ответ дан 1 December 2019 в 00:02
поделиться

Переходите на 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 ++ там, где это необходимо.

1
ответ дан 1 December 2019 в 00:02
поделиться

Я считаю, что ваша информация неверна. 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, и наоборот).

16
ответ дан 1 December 2019 в 00:02
поделиться

Если вы собираетесь использовать эту библиотеку на платформах, отличных от iPhone и Mac OS, вам следует использовать C ++. Если вы планируете переносить его только на Mac OS, то используйте Objective-C. Objective-C ++ - это просто способ интегрировать существующий код C ++ в проекты Objective-C. Таким образом, вы не стали бы писать в нем библиотеку. Однако вы можете использовать Objective-C ++ для использования этой библиотеки из проекта iPhone или Mac.

7
ответ дан 1 December 2019 в 00:02
поделиться