如何在Objective-c中为C函数指定一个指向’self’(调用obj)的指针?

大家好! 我对objective-c相当新,所以我从来没有解决过这个问题。 我在objective-c类中有一个C函数,我希望能够在包含objective-c类的属性上调用一个方法。

我明白,如果我尝试发送消息,我的C函数将无法理解“自我”是什么[self.delegate doSomething]

我假设我需要做的是给我的c函数指向我的类,所以我可以做这样的事情:

myClass-> delegate – > doSomething();

我想在全局变量中存储指向当前对象(self)的指针,因为我无法更改函数签名。 我希望能够从该类中定义的任何C函数访问指针。 这样做的原因是我正在编写一个我正在尝试使用的C库的包装器。 如果它可以帮助..我宁愿不修改此库的源。

有人可以帮我解决如何获取指向当前对象的指针吗? 谢谢!

void event_privmsg (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { //[self.delegate privateMessage]; I would like to do the following } 

self是在方法内部指向当前方法对象的指针。 因此,您可以将其分配给键入的全局变量:

 // Global scope static MyClass *globalSelf; // C function void foo() { [globalSelf->delegate doSomething]; } // ObjC method - (void)setMyselfUpAsTheGlobalVariable { globalSelf = self; foo(); } 

虽然这应该工作,但我应该指出这是相当丑陋的,你必须要小心,全局变量不会被并发代码践踏。 大多数C风格的API都允许您将void*变量作为用户定义的参数传递。 如果您正在包装的API也是如此,那么这将是存储Objective-C对象实例而不是全局变量的理想位置。

声明如下

 MyObjectiveCClass self; 

使用self extern变量来调用obj-C函数

  void event_privmsg (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { [self.delegate privateMessage]; //I would like to do the following } 

还要检查SOpost,

无法从C函数调用Objective C方法