我正在尝试从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函数?
由于
答案 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)
@interface class2 {
}
-(void) testFunction:(int)count Arg1:(const char *)args;
@end
@include "class2.h"
@interface objc_class {
}
-(class2*) instance;
@end
@include "class2.h"
@interface objc_class {
}
+(class2*) instance; // be aware of the fact, instance (normally) does not
// have access to any instance variables!