objective-c - 我可以从 C 函数调用 Objective-C 方法吗?

标签 objective-c c cocoa cocoa-touch

我是 Objective-C 的新手,所以我尝试做的事情可能无法实现。我正在将一个大型 C 函数重构为多个 C 函数和 Obj-C 方法。

这可能吗?

下面不会生成和报错

'self' undeclared.

  void serverCB(CFReadStreamRef stream, CFStreamEventType event, void *myPtr)
{
    switch(event) {
        case kCFStreamEventHasBytesAvailable:
            [self readStreamData:stream];
            break;
        case kCFStreamEventErrorOccurred:
            NSLog(@"A Read Stream Error Has Occurred!");
            break;
        case kCFStreamEventEndEncountered:
            NSLog(@"A Read Stream Event End!");
            break;
        default:
            break;
    }
}

-(void) readStreamData: (CFReadStreamRef)stream
{   
        NSData *data = [[NSMutableData alloc] init]; //TODO: I have to flush this at some point..?
        uint8_t buffer[1024];
        unsigned int len = 0;       
        len =  [(NSInputStream *)stream read:buffer maxLength:1024];        
        if(len > 0)
        {
            [data appendBytes:&buffer length:len];
        }
        NSString *serverText = [[NSString alloc]    initWithData: data encoding:NSASCIIStringEncoding];
           [data release]; // I got my string so I think I can delete this
           [self processServerMessages:serverText];

    }
}

在列出的第一个函数“serverCB”中,我试图将“readStreamData”消息发送到当前对象。那我只能从c函数调用c函数吗?

谢谢!

最佳答案

可以从 C 函数调用 Objective-C 方法。但是正如错误告诉您的那样,变量 self 没有定义。您需要将 self 作为参数传递给 serverCB,例如

void serverCB(CFReadStreamRef stream, CFStreamEventType event, void* myPtr, id self) {
   ...
   [self readStreamData:stream];
   ...
}

...

serverCB(stream, event, NULL, self);

关于objective-c - 我可以从 C 函数调用 Objective-C 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5287943/

相关文章:

cocoa - NSManagedObjectContext 保存导致 NSTextField 失去焦点

ios - swift:强制类型修饰符 "!"- 为什么它在 UIKit API 中使用(现在不合时宜)

ios - AFNetworking JSON responseObject 已修改格式

ios - 如何提高登录认证的速度?

未在文本文件中捕获段错误标准输出重定向时的 C 程序

c - rm * 的 posix 正则表达式是什么?

c - 为什么下面的代码显示错误?

objective-c - 如何从 Cocoa 获取 Spotify Mac 中当前正在播放的轨道

ios - writeToFile:atomically: atomically 是什么意思?

iphone - 我正在所有类中创建栏按钮。有没有办法只创建一次栏按钮并在所有类中使用它?