Использовать C ++ с какао вместо Objective-C?

У меня была такая же проблема, потому что мой файл был вызван email.py. Я переименовал файл, и проблема исчезла.

122
задан spaaarky21 19 August 2013 в 17:15
поделиться

5 ответов

Вы не можете записать приложение Какао полностью в C++. Какао полагается в большой степени на возможности позднего связывания Objective C для многих его базовых технологий, таких как Привязка Значения ключа, делегаты (Стиль какао), и шаблон целевого действия. Требования позднего связывания делают очень трудным реализовать Какао API в связанное время компиляции, типизированный язык как C++ вЃ±. Можно, конечно, записать чистое приложение C++, которое работает на OS X. Это просто не может использовать API Какао.

Так, у Вас есть две опции, если Вы хотите совместно использовать код между приложениями C++ на других платформах и Вашим Основанным на какао приложением. Первое должно записать образцовый слой в C++ и GUI в Какао. Это - общий подход, используемый некоторыми очень крупными приложениями, включая Mathematica. Ваш код C++ может быть оставлен без изменений (Вы не нуждаетесь в "броских" расширениях яблока записи или компилируете C++ на OS X). Ваш слой контроллера, вероятно, использует Objective C ++ (возможно, "броское" расширение Apple, которое Вы отсылаете к). Objective C ++ является надмножеством C++, как Objective C является надмножеством C. В Objective C ++, можно выполнить вызовы передачи сообщений objc-стиля (как [some-objc-object callMethod];) из функции C++. С другой стороны можно вызвать функции C++ из кода ObjC как:

@interface MyClass {
    MyCPPClass *cppInstance;
}
@end

@implementation MyClass
- (id)init {
    if(self = [super init]) {
        cppInstance = new MyCPPClass();
    }
    return self;
}
- (void) dealloc {
    if(cppInstance != NULL) delete cppInstance;
    [super dealloc];
}
- (void)callCpp {
    cppInstance->SomeMethod();
}
@end

можно узнать больше о Objective C ++ на языке Objective C руководство . Слой представления может затем быть чистым Objective C.

вторая опция состоит в том, чтобы использовать межплатформенный инструментарий C++. инструментарий Qt мог бы отвечать всем требованиям. Межплатформенные инструментарии обычно презираются пользователями Mac, потому что они не получают все детали стиля, точно правильные и пользователи Mac ожидают полировку в UI приложений Mac. QT делает удивительно хорошее задание, однако, и в зависимости от аудитории и использования Вашего приложения, это может быть достаточно хорошо. Кроме того, Вы будете терпеть неудачу на некоторых определенных для OS X технологиях, таких как Базовая Анимация и некоторая функциональность QuickTime, хотя существуют приблизительные замены в QT API. Как Вы указываете, Углерод не будет портирован к 64-разрядному. Так как QT реализован на Углеродных API, Trolltech/Nokia имели к порту Qt к Какао API для создания его 64-разрядным совместимый. Мое понимание - то, что следующие повторно генерируют QT (в настоящее время в candiate выпуска), завершает этот переход и 64-разрядный совместимый на OS X. Можно хотеть взглянуть на источник Qt 4.5, если Вы интересуетесь интеграцией C++ и API Какао.

<час>

вЃ± Некоторое время Apple сделала Какао API доступный Java, но мост потребовал обширной настройки руки и не мог обработать больше передовых технологий, таких как Привязка Значения ключа, описанная выше. Ограниченные временем выполнения языки в настоящее время с динамическим контролем типов как Python, Ruby, и т.д. являются единственной реальной опцией для записи приложения Какао без Objective C (хотя, конечно, эти мосты используют Objective C под капотом).

110
ответ дан Community 19 August 2013 в 17:15
поделиться

Да можно смешать их.

необходимо использовать Objective C, чтобы непосредственно воздействовать на объекты GUI и получить уведомления от них.

Эти объекты Objective C могут непосредственно назвать логику C++ при помещении их в .mm файлы вместо чистого Objective C.m файлы. Обратите внимание, что можно видеть (намного) более старый совет предложить использовать верхний регистр.M для указания на Objective C ++, но это очень облуплено и вероятно смутить Вас, а также компилятор.

Вы не должны переносить каждый объект C++, но Ваш код Objective C должен будет содержать указатели на них.

Apple больше не публикует образцов, показывающих, как сделать это.

существует большое видео Peter Steinberger, размещенным в Realm [Цель] C++: Что Могло Возможно Пойти не так, как надо? я настоятельно рекомендую для любого все еще использование Objective C ++, и можно быстро просмотреть расшифровку стенограммы.

9
ответ дан Andy Dent 19 August 2013 в 17:15
поделиться
  • 1
    google_conversion_format = 3; определенно фиксирует проблему. –  4 March 2014 в 08:17

Да, можно просто использовать C++ (т.е. запись его в *.cpp файлах) и даже смешать C++, и Objective C внутри *.mm файлы (стандартный код Objective C хранится в *.m файлах).

, Конечно, все еще необходимо использовать Objective C для пользовательского интерфейса и создать обертки Objective C для объектов C++. Другая опция состоит в том, чтобы переключиться на Qt, который является Платформой C++, которая поддерживает Windows, Mac OS X и Linux - и будет выпущена под LGPL со следующей версией 4.5.

17
ответ дан fhe 19 August 2013 в 17:15
поделиться

Если Вы просто надеетесь использовать простой ванильный C++, это абсолютно поддерживается и действительно не отличающееся, чем какая-либо другая платформа. XCode даже имеет шаблон для него под Файлом> Новый Проект> Утилита Командной строки> Инструмент C++. Кроме того, много популярных библиотек с открытым исходным кодом (libcurl, libxml2, sqlite, и т.д.) идут с OS X и доступны для динамического подключения. Вы не должны использовать Какао или что-либо определенное для Apple, если Вы не хотите.

, Если Вы действительно хотите использовать Какао в определенных частях Вашего приложения, смотрите на Objective C ++ . Можно смешать C++ и Objective C в том же файле путем предоставления его, расширение .mm, или путем щелчка правой кнопкой по файлу в XCode и выборе Получает Информацию> Общий затем изменение Типа файла к sourcecode.cpp.objcpp. Вторая опция полезна, если у Вас есть .cpp файл, где Вы хотите использовать Objective C в определенном для Mac #ifdef.

4
ответ дан Matt Stevens 19 August 2013 в 17:15
поделиться
  • 1
    Этот ответ должен быть проверенным ответом – Metal3d 14 May 2014 в 00:17

Если вы пишете чисто графическое приложение, то есть все рисуете с помощью кода, рассмотрите openFrameworks . Это графические языки программирования с открытым исходным кодом, построенные на основе C / C ++. Он имеет аддонов , которые позволяют людям расширять язык. У них есть аддон для iphone . Я считаю, что он поставляется с библиотекой и проектами XCode, которые помогут вам компилировать приложения для iPhone и iPod touch.

0
ответ дан 24 November 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: