我是Objective-C的新手,所以我想要做的可能是不可能的。我正在将一个大的C函数重构为多个C函数和Obj-C方法。
这可能吗?
以下内容不会构建和抱怨
'自我'未宣布。
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函数吗?
谢谢!
答案 0 :(得分:2)
你可以从C函数调用Objective-C方法。但是,正如错误告诉您的那样,变量self
未定义。您需要将self
作为参数传递给serverCB
,例如
void serverCB(CFReadStreamRef stream, CFStreamEventType event, void* myPtr, id self) {
...
[self readStreamData:stream];
...
}
...
serverCB(stream, event, NULL, self);
答案 1 :(得分:1)
您还可以创建类功能。
@interface MyClass : NSObject
{}
+ (void) myDoSometing;
@end
void myDo(int foo)
{
[MyClass DoSomething];
}