objective-c - 如何从 C 方法调用 Objective-C 方法?

我有一个 Obj-C 对象,里面有一堆方法。有时一个方法需要在同一个对象中调用另一个方法。我似乎无法弄清楚如何让 C 方法调用 Obj-C 方法...

WORKS: Obj-C 方法调用 Obj-C 方法:

[self objCMethod];

WORKS: Obj-C 方法调用 C 方法:

cMethod();

不起作用: C 方法调用 Obj-C 方法:

[self objCMethod];     // <--- this does not work

最后一个例子导致编译器吐出这个错误:

error: 'self' undeclared (first use in this function)

两个问题。为什么 C 函数看不到“self”变量,即使它位于“self”对象内部,如何调用它而不导致错误?非常感谢您的帮助! :)

最佳答案

为了让它工作,你应该像这样定义 C 方法:

void cMethod(id param);

当你调用它时,这样调用它:

cMethod(self);

那么,你就可以写:

[param objcMethod];

在你的 cMethod 中。

这是因为 self 变量是一个自动传递给 Objective-C 方法的特殊参数。由于C方法不享有这个特权,如果你想使用self你必须自己发送。

在 Method Implementation section of the programming guide 中查看更多信息.

https://stackoverflow.com/questions/1280017/

相关文章:

c - 在 Objective-C 类中混合 C 函数

objective-c - 滚动 NSScrollView 时的回调?

iphone - 在 Objective-C 中随机化 NSArray 的规范方法

iphone - 如何以编程方式区分 iphone 4 和 iphone 4S?

objective-c - NSMutableDictionary 线程安全

objective-c - 在 mac 包中嵌入字体

objective-c - 如何在没有 Interface Builder 的情况下创建 Cocoa

objective-c - 在 ARC 之后,我应该为调度队列使用什么属性?

iphone - 从 float 或 double 实例化 NSDecimalNumber 的正确方

ios - 使用钩子(Hook)在 Instagram 上发布视频