如何从C函数调用objective-C函数

时间:2010-08-07 00:11:02

标签: c objective-c function

我正在尝试从C函数调用Objective-C函数,但代码在objc_msgSend中不断崩溃。

我的Objective-C类是一个单例,我正在使用以下代码。

void c_function(int arg0, const char *arg1)  
{  
   [[objc_class instance] testFunction:arg0 Arg1:arg1];  
}

gdb显示在调用objective-C函数时发生崩溃。我如何在c函数中调用Objective-C函数?

由于

3 个答案:

答案 0 :(得分:2)

您的代码没有任何问题,因为没有从c函数调用objc方法的特殊规则。如果objc_msgSend发生崩溃,请参阅http://www.sealiesoftware.com/blog/archive/2008/09/22/objc_explain_So_you_crashed_in_objc_msgSend.html。如果objc行在其他objc代码中也会发生同样的事情 - 你很可能忘记保留单例的共享实例。

答案 1 :(得分:-1)

[[objc_class instance] testFunction:arg0 Arg1:arg1];

由于您未提供进一步的信息:

objec_class 是一个实例,你的单身人士?它处理消息实例? ...

objec_class 实际上是一个类,有一个类方法 instance ?这会给你另一个例子......

换句话说,你真的喜欢

@interface class2 { } -(void) testFunction:(int)count Arg1:(const char *)args; @end

@include "class2.h" @interface objc_class { } -(class2*) instance { } -(void) testFunction:(int)count Arg1:(const char *)args; @end

@include "class2.h" @interface objc_class { } +(class2*) instance; // be aware of the fact, instance (normaly) does not have // access to any instance variables!

包括在内?

你的代码看起来不像“嘿,对象(实例)单身,我告诉你'实例'。然后我接受你的回复并给它消息'testFunction:Arg1:'(插入一些值)“!

(你确定你理解客观c?)

问候

答案 2 :(得分:-1)

1

@interface class2 {

}

-(void) testFunction:(int)count Arg1:(const char *)args;

@end

2:

@include "class2.h"

@interface objc_class {

}

-(class2*) instance;

@end 

3:

@include "class2.h"

@interface objc_class {

}

+(class2*) instance; // be aware of the fact, instance (normally) does not
                     // have access to any instance variables!