在运行之前在iPhone上创建和存储前缀树

时间:2010-12-17 19:39:08

标签: iphone cocoa-touch trie prefix-tree

我目前正在为iOS制作一款文字游戏,在加载时会读入大约30000个单词的文本文件并将其加载到前缀树中,以便在游戏过程中快速搜索。这很好用,但加载和树构建过程会为应用程序的启动时间增加一个明显的几秒钟。目前我正在iPhone 4上进行测试,但我认为在3GS早期型号上它会慢得多。

有没有办法在编译时创建此树而不是应用程序打开时?或者,理想情况下,是否可以使用其他程序预烘焙数据并将该文件添加到项目中而不是在运行时进行?我该怎么做呢?

2 个答案:

答案 0 :(得分:3)

我遇到了与我们开发的游戏相同的问题,对我们来说,使用带有单词而不是内存树的SQLite DB表现得更好。 DB使用的空间比表示树的plist少,它不需要我们在内存中预加载它,并且性能(查询有效单词时)大致相同。

答案 1 :(得分:0)

pgb的回答很好。如果您不想使用SQLite,可以将数据存储在plist中,并让[NSDictionary dictionaryWithContentsOfFile:]为您创建一个树。

如果您确实选择将数据编译到程序中,则必须使用基本类型(如数字和字符)构建。然后,使用结构和数组来定义结构,并使用常量变量来存储数据。这是一个简单的例子,它只是一个字符串数组:

const char *words[] = {"Word1","Word2","Word3"};
const unsigned numWords = (sizeof(words) / sizeof(char*));