需要帮助将C函数转换为Objective C方法

我有一个用C编写的函数,它相当大,目前只在C文件的main()函数中运行,而我一直在测试它。 这是它的声明

void getData(const char* encodedBuffer, int user); 

如果你想看到getData的内容,那么这就是它的pastebin。

截至目前,我只是传递encodedBuffer,我将有一个全局变量,由getData函数更新。

我想知道将这样的基于C的函数转换为Objective-C协议方法的正确方法是什么。 现在我正在这样设置它

iDriver.h(我的界面/协议)

 #import  @protocol iDriver  -(void)getData; -(void)cancel; @end 

DriverOne.h(实际实现协议方法的类)

 #import  #import "iDriver.h" @interface DriverOne : NSObject  @end 

DriverOne.m

 #import "DriverOne.h" @implementation DriverOne enum Status getData(char* encodedBuffer, int user) { // Copy C code which I showed in the link earlier // to above into this method. I will want it to return a status // and populate a global variable with the data. } 

我的想法是,我不应该真正遇到任何问题这样做,因为Objective-C是C的超集,但只是将C代码复制到这样的方法中会有问题吗?

将C函数移植到ObjC方法时,只需对签名进行调整即可。 在你的情况下,你会改变:

 enum Status getData(char* encodedBuffer, int user) 

类似于:

 - (enum Status) getData: (char*) encodedBuffer user: (int) user 

Objective C方法总是用-开头表示(类方法以+开头)。 如果要指定类型,则放入parens(否则假定为“object”的通用类型id )。 您必须将您的函数名称键入关键字。 每个参数都有一个关键字。

然后就像C一样,你可以将该行复制粘贴到头文件中:

 @protocol iDriver  - (enum Status) getData: (char*) encodedBuffer user: (int) user; @end 

之后,只需复制方法内部的内脏即可。

目前尚不清楚你对OO和实例背后的想法有多熟悉,但使用它可能看起来像:

 DriverOne *driverOneObject = [[DriverOne alloc] init]; char *buffer = malloc(YOUR_BUFFER_SIZE); enumStatus status = [driverObject getData: buffer user: SomeUserThing]; 

即将完整的循环,是否有理由要将其统一(变成对象)? 我自己都是为了很多对象,但ObjectiveC的一个特性就是它是C的超集。你可以像C原型一样使用你的函数。 您不必将它包装在ObjectiveC对象中,除非您看到这样做的优势。