我有一个Objective-C类。我正在做的是我在我的Objective-C类中调用C函数[这个C函数我在一个文件中实现,它是这个示例ios项目的一部分]。所有的C函数都运行正常,到目前为止还没有问题。
当我尝试在C文件中调用异步函数时,该函数会在一段时间后响应objective-c类。我在C中调用了函数指针,它在Objective-C类中被正确触发。请检查以下代码段。我想在回调方法上做一些与UI相关的操作。那可能吗 ?如果没有其他方法吗?你能尽快给我答复吗?感谢。
C档案:
void my_int_func(int x);
void test_asyn_fun ()
{
/* This code is for Sleep logic */
for (int i=0; i<50000; i++) {
// sleep
}
/* Sleep End */
void (*foo)(int);
foo = &my_int_func;
foo(25);
}
Objective-C文件:
void my_int_func(int x) // this is call back method
{
printf( "%d\n", x ); // working properly
[self anyMethodInMyClass]; // I am unable to use self in this function.
}
其实我的要求是
我有C代码,可以进行Voip通话功能。 我从Objective-C [iOS]代码调用C函数。 如果接收方已断开呼叫,则会调用我的一个C函数并停止该过程。但我的UI仍然显示调用相关的UI。我想解雇那个。
这里,如何从C函数向Objective-c类发送通知以关闭UIView。任何人都可以帮助我。
实际上我使用了函数指针,但它不起作用。
答案 0 :(得分:2)
我也遇到了这个问题。我假设你正在使用PJSIP作为你的VoIP应用程序。
您要做的是创建一个指向您要向其发送消息的Objective-C类的指针。您已经认为不能从C回调中调用Objective-C函数。
static YourObjCClass *objCClassPtr
@property (nonatomic, retain) YourObjCClass *class
初始化所述类时,让静态指针指向Objective C对象的指针。 (指向对象指针的指针)
objCClassPtr = class;
您现在可以使用C函数中的 [objCClassPtr message]
向Objective-C对象发送消息,就像您要编写[class message]
你可以用同样的方式指向self
。
答案 1 :(得分:2)
首先感谢Ricardo Kloth,现在它正在为我工作。
这是我的代码......
Objective-C代码:
static id staticObject = nil;
@Implementation MyObjCclass
init
{
....
staticObject = self;
}
// C fun
void functionPointer()
{
[staticObject message]; // it's working
}
-(void) message
{
}
@end
答案 2 :(得分:0)
您可以使用块。 Blocks可用于纯C和C ++,块也始终是Objective-C对象。
答案 3 :(得分:0)
即使在Blocks中,您也无法正确访问实例变量。请检查以下代码段。
//这是简单的区块代码
NSString *(^ trimTheStr)(NSString *)= ^(NSString * str) {
[self myInstanceMethods]; // This will show error right
NSString *result = nil;
result = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
return result;
};