在Obj-C中使用C语法调用静态方法?

Dan*_*ark 4 syntax objective-c

我可以使用适当的Obj-C语法重做这个方法,但我想知道如何从Obj-C调用它.该方法看起来像这样

@interface YarMidiCommon : NSObject

static
MIDIPacketList *makePacketList(Byte *packetBuffer, const UInt8 *data, UInt32 size);

@end
Run Code Online (Sandbox Code Playgroud)

但我不知道如何调用该方法.我试过了

Byte packetBuffer[size+100];
MIDIPacketList *packetList = makePacketList(packetBuffer, bytes, size);
Run Code Online (Sandbox Code Playgroud)

但错误是"有内部联系,但没有定义." 如果不诉诸"适当的"Obj-C语法,这可能吗?

为了记录,我想模仿的方法就像是

+ (MIDIPacketList*) makePacketListWithPacketBuffer:(Byte*)packetBuffer data:(const UInt8 *)data size:(UInt32)size;
Run Code Online (Sandbox Code Playgroud)

这是冗长而烦人的,因为这里的一切都是C无论如何.

这与我今天得到的另一个答案有关.

Joe*_*Joe 8

由于该函数是C函数,因此您需要删除静态关键字,否则它将无法在其翻译单元外看到.一旦你这样做,你的第一个例子将起作用.此外,因为它是一个C函数将其声明放在内部或外部的@interface定义内部或外部,所以@implementation对你如何调用它没有任何区别.


jus*_*tin 5

将声明视为等效于全局范围中的静态C函数.这与C++或Java非常不同.此功能没有类范围或外部链接.

因此,@interface范围不是一个很好的声明地方makePacketList.该消息表示使用它时定义不可见.