id object_pointer;
(obj init method)...
object_pointer = self;
void some-c-function( void )
{
// Calling a class method from this C function:
[Some_Obj_C_Class class_method];
// or to calling an object method:
[object_pointer object_method];
}
我必须在C函数中编写最高级代码,以便最终可以将部分移植到嵌入式系统中。我正在使用iPad来模拟尚未提供的硬件。
答案 0 :(得分:1)
C函数当然可以调用Objective-C方法。实际上,C函数甚至可以是 Objective-C方法。谈论如何工作进入Objective-C运行时,这是一个稍微相关的话题。没有参数的Objective-C方法可以被认为是具有两个参数的C函数:self
和_cmd
。在编译时,除了任何方法参数之外,Objective-C方法调用被转换为对objc_msgSend
函数之一的调用,该函数接受选择器和对象。
可能令人困惑的一件事是,因为self
在大多数方法中都是一种隐藏的参数,所以即使你在@implementation
中定义了它,它也无法从标准的C函数中访问。你的对象只要您使用可在函数范围内访问的Objective-C变量,就可以进行Objective-C方法调用。