从C+;调用Objective-C类方法+; 我从C++文件中调用ObjuleC类方法有点麻烦。例如:

从C+;调用Objective-C类方法+; 我从C++文件中调用ObjuleC类方法有点麻烦。例如:,c++,objective-c,C++,Objective C,在my.h中: @interface MyClass : NSObject { } + (void)myMethod:(NSString *)str; 在my.m中: + (void) myMethod:(NSString *)str { ... } 在my.cpp中: ?? 既然没有类实例,如何调用myMethod?它本质上是静态的 谢谢您需要一个.mm来调用Objective-C方法,而不是一个.cpp。除此之外,您关于“它本质上是静态的”的评论是准确的,因为您可以使用与在C++中调用

在my.h中:

@interface MyClass : NSObject {
}
+ (void)myMethod:(NSString *)str;
在my.m中:

+ (void) myMethod:(NSString *)str { ... }
在my.cpp中:

??
既然没有类实例,如何调用myMethod?它本质上是静态的


谢谢

您需要一个.mm来调用Objective-C方法,而不是一个.cpp。除此之外,您关于“它本质上是静态的”的评论是准确的,因为您可以使用与在C++中调用静态类函数类似的逻辑来调用它:

[MyClass myMethod:@"Some String"];

虽然在C++中,该方法不是静态的,但它不影响编译的结果,它在编译时没有被解析,它在一个类(MyClass metaclass)中运行。C++中的< /p> 对象与Objtovi.C中的对象不兼容。C++不能简单地调用C++的Objtovi-C方法。 但是,有一些解决方案:

  • 使用Objective-C++。将您的<代码> .CPP < /C> > <代码> > mm >代码>,然后您可以在C++代码中使用Objto-C语法:<代码> [FulyLysMyMyField:@“Fo”];<代码>

  • 使用对Objective-C运行时系统的直接调用。我不会告诉你怎么做,因为我真的认为你不应该,事实上你不想

  • 编写一个纯C接口。也就是说,在一些<代码> .M/COD>文件中,定义<代码>无效MyTalm(const char *STR){…} /Cuff>并从C++调用它。你可以找到一个这样的例子


  • 如果我没有将所有.cpp文件转换为.mm的选项,我有哪些选项?我试图维护跨平台能力,所以我不能去改变文件类型。CPP文件可以调用任何旧的C++和.MM文件包含C++和Objto-C,所以一个瘦平台特定层是一种选择;或者,在Xcode中,使用工具栏上单词“View”上方的按钮打开右侧面板,转到“Identity and Type”,并将文件类型设置为Objective-C++。这将导致相关标志被发送到编译器,从而不会遵循“按文件名键入”的默认行为。@Asheh:您可以在Xcode中重写文件类型。单击项目导航器中的.cpp文件,文件检查器将显示一个名为“文件类型”的下拉列表。将此从默认值更改为Objto-C++源,然后CPP文件可以包含目标C语法,就像它是.MMI,在C++侧生成一些全局数据并用Objto-C访问它将是最可行的选择。