我正在创建一个OS X应用程序,允许用户弹钢琴(使用MIDI键盘)。音符将从左向右滚动,由用户在正确的时间播放正确的音符,有点类似于摇滚乐队或任何其他游戏。将滚动的音符将从文本文件或某种输入源生成,它可能如下所示:
C4 D4 B3 A3 C4 ...
我正在为音乐笔记创建一个字典。在音乐中,有12个独特的值,所以我们只说有12种独特的字母类型。 “C”的值为0,“C#”为1,“D”为2,等等。我需要以这种方式编写它们,因为用户将要播放的MIDI数据是以数字方式生成的。 “C”将始终为0,因此需要对此数据进行硬编码。在多个类之间共享此字典的最佳实践是什么,以便该类的每个实例也可以访问它?
答案 0 :(得分:1)
在多个类之间共享此字典的最佳做法是什么,以便该类的每个实例也可以访问它?
在类的+initialize
方法中创建字典,并将指针存储在静态(文件范围)变量中。在创建类的任何实例之前调用+initialize
,因此它是一个很好的地方,可以独立于特定对象执行类所需的任何设置。
static NSDictionary *notesDict;
@implementation SomeClass
+ (void)initialize
{
notesDict = @{@"C" : @0, @"C#" : @1, @"D" : @2};
}
+ (NSDictionary*)notes
{
return notesDict;
}
//...
@end
如果有必要,+notes
访问者可以轻松地从其他类访问字典。