我不知道这是否可行,但是用纯C语言编写代码,是否可以从中调用Cocoa API?
像#include <cocoa.h>
一样,添加相应的库并继续使用?
谢谢您的帮助
最佳答案
如果链接到Cocoa或Foundation框架,则可以在C代码中使用Objective-c。但是,如果要使用普通的消息传递语法,则必须将文件扩展名从.c更改为.m,以便将其编译为Objective-c。如果保留.c扩展名,则只能使用c风格的运行时调用与目标对象(即objc_msgSend
,objc_getClass
等)进行交互。
示例:.m文件中
void cFunction() {
[[NSString alloc] init];
}
在.c文件中
void cFunction() {
void* cls = objc_getClass("NSString");
void* obj = objc_msgSend(cls, NSSelectorFromString(CFSTR("alloc")));
obj = objc_msgSend(obj, NSSelectorFromString(CFSTR("init")));
}
如果选择第二种方法,请参见Objective-C Runtime Reference。
关于c - 从C调用Cocoa API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50662715/