Цель C - списки свойств или текстовые файлы? - PullRequest
0 голосов
/ 21 января 2010

Мне нужно импортировать список из примерно 40000 слов в мое приложение для Iphone. Список будет одинаковым при каждом запуске приложения. Кажется, что списки свойств и текстовые файлы являются разумными вариантами.

Есть ли причина отдавать предпочтение одному другому? По причинам, которые я не понимаю, искатель говорит, что список свойств на моем Mac составляет 1 МБ, а текстовый файл только 328 КБ. Список свойств представляет собой NSMutableArray из NSMutableArrays из NSStrings. Текстовый файл представляет собой простой текстовый файл. Но количество времени, которое требуется приложению для запуска, также важно. Если я читаю в текстовом файле, мое приложение должно будет выполнять некоторую простую обработку при каждом запуске.

Спасибо.

Ответы [ 3 ]

1 голос
/ 21 января 2010

То, что сказал Джастин - сначала измерить, а затем оптимизировать, если простейшее решение - списки свойств - слишком дорого. Обратите внимание, что списки свойств могут быть двоичными; см. справочную страницу plutil .

Списки свойств не волшебны; они также должны быть проанализированы и обработаны при запуске.

Таким образом, вам лучше всего поместить их в текстовый файл, по одному слову в строке.

Теперь, если вы хотите быть очень эффективным в этом, я бы сделал что-то вроде:

  • используйте символы NULL в качестве разделителя

  • выделите буфер памяти размером с текстовый файл и прочитайте все содержимое файла в него (вы можете легко использовать +dataWithContentsOfFile: NSMutableData, а затем просто вызвать -bytes, чтобы получить доступный для записи буфер) .

  • вам, очевидно, понадобится указатель на каждое слово; trivial - итерация по буферу символ за символом, и каждый раз, когда вы видите NULL (а не в конце), вы знаете, что следующий байт - следующий адрес - будет указателем на первый символ следующее слово

  • , если вам нужны строки NSString, используйте строки NSString [initWithBytesNoCopy:length:encoding:freeWhenDone:][2]

Достаточно просто, чтобы я даже не посчитал это преждевременной оптимизацией.

Если вы хотите получить действительно хитрый, вы можете отсортировать слова по длине и сделать небольшую арифметику с указателями, чтобы избежать итерации по каждому символу. Но это было бы преждевременно.

1 голос
/ 21 января 2010

Каждый массив окружен <array></array>, а каждая строка окружена <string></string> в списках свойств XML.Я не знаю, что такое «простой текстовый файл» в контексте хранения массива, но я думаю, что вы говорите о чем-то менее многословном, чем XML.При таком объеме данных я мог видеть, что XML занимает в три раза больше места, чем, скажем, CSV.Может также пойти на меньший формат, если он также выполняет свою работу.

0 голосов
/ 21 января 2010

Попробуйте оба варианта и посмотрите, является ли скорость проблемой. Вполне возможно, что вы не заметите разницы, в таком случае я бы использовал XML, чтобы избежать «простой обработки», которую вам придется выполнять с текстовым файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...