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

时间:2014-03-11 19:32:55

标签: objective-c c cocoa oop

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

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

如果你想看到getData Here的内容是它的pastebin。

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

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

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

#import <Foundation/Foundation.h>

@protocol iDriver <NSObject>
-(void)getData;
-(void)cancel;

@end

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

#import <Foundation/Foundation.h>
#import "iDriver.h"

@interface DriverOne : NSObject <iDriver>

@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代码复制到这样的方法中会有问题吗?

1 个答案:

答案 0 :(得分:1)

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

enum Status getData(char* encodedBuffer, int user)

类似于:

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

目标C方法总是在开头用-表示(类方法以+开头)。如果你想指定类型,你可以放入parens(否则它被假定为id类型,它对于&#34; object&#34;)是通用的。您必须将您的函数名称键入关键字。每个参数都有一个关键字。

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

@protocol iDriver <NSObject>
- (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对象中,除非你看到这样做的优势。