我目前正在为 iOS 制作一个文字游戏,加载时会读取大约 30000 个单词的文本文件并将它们加载到前缀树中,以便在游戏过程中快速搜索。这很好用,但是加载和树构建过程会明显增加应用程序的启动时间几秒钟。目前我正在 iPhone 4 上进行测试,但我想在 3GS 早期型号上它会慢很多。
有没有办法在编译时而不是在应用程序打开时创建这个树?或者,不太理想的是,是否可以使用另一个程序预烘焙数据并将该文件添加到项目中,而不是在运行时进行?我该怎么做呢?
我目前正在为 iOS 制作一个文字游戏,加载时会读取大约 30000 个单词的文本文件并将它们加载到前缀树中,以便在游戏过程中快速搜索。这很好用,但是加载和树构建过程会明显增加应用程序的启动时间几秒钟。目前我正在 iPhone 4 上进行测试,但我想在 3GS 早期型号上它会慢很多。
有没有办法在编译时而不是在应用程序打开时创建这个树?或者,不太理想的是,是否可以使用另一个程序预烘焙数据并将该文件添加到项目中,而不是在运行时进行?我该怎么做呢?
我在我们开发的游戏中遇到了同样的问题,对我们来说,使用带有单词的 SQLite DB 而不是内存中的树表现得更好。DB 使用的空间比代表树的 plist 少,它不需要我们将它预加载到内存中,并且性能(查询有效单词时)大致相同。
pgb 的回答很好。如果您不想使用 SQLite,您可以将数据存储在 plist 中并让 [NSDictionary dictionaryWithContentsOfFile:] 为您创建树。
如果您确实选择将数据编译到您的程序中,则它必须由基本类型构建,例如数字和字符。然后,使用结构体和数组来定义结构体,并使用常量变量来存储数据。这是一个简单的示例,它只是一个字符串数组:
const char *words[] = {"Word1","Word2","Word3"};
const unsigned numWords = (sizeof(words) / sizeof(char*));