从C到Objective-C的callback方法

我有一个Objective-C类。 我正在做的是我在我的Objective-C类中调用C函数[这个C函数我在一个文件中实现,这是本示例ios项目的一部分]。 所有的C函数工作正常,到目前为止没有问题。

当我尝试在C文件中调用一个asynchronous函数时,这些函数会在一段时间后对objective-c类作出响应。 我在C中调用了在Objective-C类中正确触发的函数指针。 请检查下面的代码片段。 我想在callback方法上做一些与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呼叫function。 我从我的Objective-C [iOS]代码调用C函数。 如果调用已经被接收器断开,我的一个C函数被调用并停止了这个过程。 但是我的UI仍然显示调用相关的UI。 我想解雇那个。

在这里,我如何发送通知给我的Objective-C类从C函数closuresUIView。 任何人都可以帮助我。

其实我使用函数指针,但它不工作。

我遇到了这个问题。 我假设你正在使用PJSIP为您的VoIP应用程序。

你想要做的是创build一个指向你想发送消息的Objective-C类的指针。 你已经知道你不能从你的Ccallback中调用Objective-C函数。

static YourObjCClass *objCClassPtr

@property (nonatomic, retain) YourObjCClass *class

初始化所述类时,请将静态指针指向Objective C对象的指针。 (指向指向对象的指针的指针)

objCClassPtr = class;

您现在可以使用C函数中的[objCClassPtr message]将消息发送到Objective-C对象,就好像您要写[class message]

你可以用同样的方式指向self

首先感谢里卡多Kloth,现在它为我工作。

这是我的代码…

Objective-C代码:

 static id staticObject = nil; @Implementation MyObjCclass init { .... staticObject = self; } // C fun void functionPointer() { [staticObject message]; // it's working } -(void) message { } @end 

你可以使用块。 块可用于纯C和C ++,块也总是一个Objective-C对象。

C ++块对象

即使在块中也不能访问实例variables。 请检查下面的代码片段。

//这是简单的块代码

NSString *(^ trimTheStr)(NSString *)= ^(NSString * str){

 [self myInstanceMethods]; // This will show error right NSString *result = nil; result = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; return result; 

};