Смешивание C++ и Objective C
Где я могу найти конкретный документ или документацию dos и donts по использованию C++ с Objective-C?
Apple, похоже, удалила этот документ со своего веб-сайта, и я озадачен сопоставлением битов информации из блогов и вопросов, размещенных здесь.Любой может вести себя примерно так же.
Когда мы используем файл. mm, при смешивании синтаксиса или при использовании объекта.файл m, который принадлежит классу C++?
Пока передача объектов между функциями, принадлежащими к двум разным языкам, как передача объекта objective-c в функцию в файле cpp необходимо ли собирать его в void * или я могу использовать (ObjectiveC inteface)*?
2 ответа:
Вы должны использовать Objective-C++ всякий раз, когда вы либо
#include
/#import
ing или непосредственно написание кода Objective-C и C++ в одном файле. Это обычно очевидно с явным кодом;#include
S часто меньше, и вам нужно позаботиться о том, чтобы избежать "утечки" одного из языков в слишком большую часть другого. Ваш пример#import
ing файла заголовка C++ ясен: вы можете сделать это только с Objective-C++. Обратите внимание, что если вашCplusplus
был типомstruct
, вы могли бы объявить его как таковой вместо#import
ing заголовок 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.