Смешивание C++ и Objective C


Где я могу найти конкретный документ или документацию dos и donts по использованию C++ с Objective-C?

Apple, похоже, удалила этот документ со своего веб-сайта, и я озадачен сопоставлением битов информации из блогов и вопросов, размещенных здесь.

Любой может вести себя примерно так же.

Когда мы используем файл. mm, при смешивании синтаксиса или при использовании объекта.файл m, который принадлежит классу C++?

Пока передача объектов между функциями, принадлежащими к двум разным языкам, как передача объекта objective-c в функцию в файле cpp необходимо ли собирать его в void * или я могу использовать (ObjectiveC inteface)*?

2 5

2 ответа:

Вы должны использовать Objective-C++ всякий раз, когда вы либо #include/#importing или непосредственно написание кода Objective-C и C++ в одном файле. Это обычно очевидно с явным кодом; #includeS часто меньше, и вам нужно позаботиться о том, чтобы избежать "утечки" одного из языков в слишком большую часть другого. Ваш пример #importing файла заголовка C++ ясен: вы можете сделать это только с Objective-C++. Обратите внимание, что если ваш Cplusplus был типом struct, вы могли бы объявить его как таковой вместо #importing заголовок C++.

Если вы сделаете это в заголовке, он" отравит " заголовок, чтобы он работал только в этом режиме. Вам нужно будет активно избегать этого, или весь ваш проект скоро закончится только файлами .mm. я описал некоторые методы в этой статье и ранее, в этой более ранней статье. Для новой версии Objective-С, вы также можете добавить Иварс классов в расширениях категории. Это означает, что вы можете определить c++-типизированные ivars в вашем файле. mm, не заголовок, который позволяет .m файлов в #import it.

Для вашего второго вопроса ( пожалуйста, задавайте только один вопрос за раз): тип id определен в заголовочном файле objc.h в терминах C и, таким образом, будет работать как в Objective-C, так и в C++. Аналогичным образом, Objective-C runtime API представлен в терминах функций C, которые также будут работать с C++. Если вы действительно хотите отправлять сообщения и получать доступ к свойствам объектов Objective-C с каноническим синтаксисом из кода C++, вам потребуется переключите этот файл на Objective-C++.

Используйте файлы. mm, когда в коде используется синтаксис c++ или когда вы включаете файлы, содержащие код c++.

Смешивание C++ с objective-c может быть немного запутанным, но если вы думаете, что это указатель, то это не так уж и важно. Относитесь к методам экземпляра объекта C++ так же, как в C++, и то же самое относится к объектам objective C.