据我所知,如果我尝试发送消息,我的C函数将无法理解'self'是什么[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
}
答案 0 :(得分:17)
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对象实例而不是全局变量的理想位置。
答案 1 :(得分:0)
声明如下
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
}
同时查看SO帖子,