Создание и сохранение префиксного дерева на iPhone перед выполнением - PullRequest
1 голос
/ 17 декабря 2010

В настоящее время я делаю игру в слова для iOS, которая при загрузке читает текстовый файл, содержащий около 30000 слов, и загружает их в дерево префиксов для быстрого поиска во время игры.Это работает хорошо, но процесс загрузки и построения дерева добавляет заметные несколько секунд ко времени запуска приложения.В данный момент я тестирую на iPhone 4, но я думаю, что на более ранних моделях 3GS это будет намного медленнее.

Есть ли способ создать это дерево во время компиляции, а не когда приложениеоткрывает?Или, в идеале, было бы возможно предварительно запечь данные с другой программой и добавить этот файл в проект вместо того, чтобы делать это во время выполнения?Как бы я поступил так?

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

Я столкнулся с той же проблемой с игрой, которую мы разработали, и для нас было лучше использовать БД SQLite со словами вместо дерева в памяти.БД использовала меньше места, чем plist, представляющий дерево, она не требовала от нас предварительной загрузки его в память, и производительность (при запросе правильного слова) была примерно одинаковой.

0 голосов
/ 18 декабря 2010

ПГБ ответ хороший. Если вы не хотите использовать SQLite, вы можете сохранить свои данные в plist и заставить [NSDictionary dictionaryWithContentsOfFile:] создать дерево для вас.

Если вы решили скомпилировать данные в вашу программу, она должна быть построена из примитивных типов, таких как числа и символы. Затем используйте структуры и массивы для определения структуры и используйте постоянную переменную для хранения данных. Вот простой пример, представляющий собой массив строк символов:

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