在Objective-C的单个文件中的类之间共享“静态”方法
||
我对“ 0”方法感到困惑,该方法的定义显然存在于一个类中,但是其声明在同一文件的多个类之间共享。可以以某种方式在文件之间共享吗?
细节
我正在尝试将ѭ1文件分成几个文件(每个类一个)。所有源代码均来自Pete Goodliffe的CoreMIDI Example。
我从这里开始学习PGMidi类,并将其分解为单独的接口和类。除了标记为“ 0”的一种方法外,其他所有内容都可以完美编译,该方法必须同时放在两个位置(在PGMidi中为“已使用但从未定义”)。该方法在任何类实现之外的这一行中都是“已使用”:
static void PGMIDIReadProc(const MIDIPacketList *pktlist, void *readProcRefCon, void *srcConnRefCon);
这显然是由同一文件中所有类共享的(是什么?)。在两堂课中都有提到。
1)在PGMidi
中使用它(也许指向PGMidiSource
s = MIDIInputPortCreate(client, (CFStringRef)@\"MidiMonitor Input Port\", PGMIDIReadProc, self, &inputPort);
2)在PGMidiSource
中,定义了方法主体
static
void PGMIDIReadProc(const MIDIPacketList *pktlist, void *readProcRefCon, void *srcConnRefCon)
{
PGMidiSource *self = (PGMidiSource*)srcConnRefCon;
[self midiRead:pktlist];
}
问题是方法主体中提到的self
在PGMidi
中没有意义(没有midiRead
方法)。
static
方法是什么?如何使它在两个文件之间工作?
没有找到相关结果
已邀请:
3 个回复
犯痪桂涛杭
大致表示\“仅在此文件内可见和可用”。由于它是在
中定义的,因此您不能从
中调用它。幸运的是,这很容易解决。 在
中声明函数原型,如下所示:
删除
中的
关键字,因为它需要从该文件外部可用。 请注意,这不是“方法”;它是一个C函数。因此,它不属于任何类,不与任何实例绑定,无法访问任何实例变量等。必须将其需要的任何上下文作为参数传递。因此,尽管此函数使用一个名为“ self”的变量,但实际上它只是传入的参数之一的本地别名。
磨标烫徽啪
雄鞋谋塘