Файлы
.m могут быть вызваны из файлов .mm. Но файлы .mm нельзя вызывать из файлов .m.
Не уверен, что вы подразумеваете под этим, но я думаю, что это неправильно.
Часть "Objective" в Objective-C (++) одинакова для обоих языков. Неважно, является ли реализация Objective-C или Objective-C ++, объекты будут полностью совместимы.
Что имеет значение, так это заголовочный файл, в котором объявлен интерфейс. Например:
@interface Foo
{
CPPFoo myFoo; // A C++ object
}
@end
нельзя включить в обычный файл Objective-C .m
, потому что классы C ++ недопустимы в C. Один из способов обойти это - использовать предварительные объявления и указатели, например,
#if defined __cplusplus
class CPPFoo;
#else
typedef struct CPPFoo CPPFoo;
#endif
@interface Foo
{
CPPFoo *myFoo; // NOTE: a pointer to a C++ object
}
@end
Вам необходимо добавить указатель в -init
и удалить его в -dealloc/-finalize
Нужно ли кодирование Objective C ++ для разработки iPhone
Нет. Раньше я думал (исходя из фона C ++), что было бы лучше использовать C ++ везде и Objective-C только в пользовательском интерфейсе. Однако мне не потребовалось много времени, чтобы понять, что объектная модель Objective-C лучше, чем модель C ++. Так что теперь я рассмотрел бы C ++ только в двух случаях:
- при взаимодействии с библиотеками, написанными на C ++
- , если важна производительность и вам нужна встроенная объектная модель (т.е. вы не хотите использовать чистый C)