-2
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 来模拟尚不可用的硬件。

4

1 回答 1

1

AC 函数当然可以调用 Objective-C 方法。事实上,C 函数甚至可以是 Objective-C 方法。谈论的工作原理进入了 Objective-C 运行时,这是一个稍微相关的话题。一个没有参数的 Objective-C 方法可以被认为是一个只有两个参数的 C 函数:self_cmd. 在编译时,Objective-C 方法调用被转换为对其中一个objc_msgSend函数的调用,该函数接受一个选择器和一个对象,以及任何方法参数。

可能令人困惑的一件事是,由于self在大多数方法中它是一种隐藏参数,因此即使您在@implementation对象内部定义了它,标准 C 函数也无法访问它。只要您使用在函数范围内可访问的 Objective-C 变量,就可以进行 Objective-C 方法调用。

于 2013-07-13T18:53:44.903 回答