3

我有一个 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);
}  

目标-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.
}

其实我的要求是

我有可以执行 Voip 呼叫功能的 C 代码。我正在从我的 Objective-C [iOS] 代码中调用 C 函数。如果接收方已断开呼叫,则我的 C 函数之一被调用并停止该过程。但我的 UI 仍然显示调用相关的 UI。我想驳回这一点。

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

实际上我使用了函数指针,但它不起作用。

4

4 回答 4

2

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

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

static YourObjCClass *objCClassPtr

@property (nonatomic, retain) YourObjCClass *class

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

objCClassPtr = class;

您现在可以使用 [objCClassPtr message]您的 C 函数向 Objective-C 对象发送消息,就像您会编写一样[class message]

您可以指向self相同的方式。

于 2012-08-30T13:51:01.390 回答
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
于 2012-08-30T15:20:21.000 回答
0

您可以使用块。可用于纯 C 和 C++,块也始终是 Objective-C 对象。

C++ 块对象

于 2012-08-30T09:40:17.033 回答
0

即使在 Blocks 中,您也无法正确访问实例变量。请检查以下代码片段。

// 这是简单的代码块

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

[self myInstanceMethods]; // This will show error right 

NSString *result = nil;

result = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

return result;

};

于 2012-08-30T10:35:36.570 回答