ленивая оценка зашифрованного текста, хранящегося в большом NSArray - PullRequest
0 голосов
/ 05 сентября 2011

Я должен хранить около 10 тыс. Строк текста в массиве. Каждая строка хранится как отдельная зашифрованная запись. Когда приложение запускается, мне нужно только получить доступ к небольшому числу и расшифровать их - в зависимости от ввода пользователя. Я думал о какой-то ленивой оценке, но не знаю, как это сделать в этом случае.

Вот как я строю свой массив: [allElements addObject: @"wdhkasuqqbuqwz" ] Строка зашифрована. Доступ подобен txt = [[allElements objectAtIndex:n] decrypt]

Проблема в настоящее время в том, что она использует много памяти с самого начала - большинство предметов мне не нужны, просто не знаю, какие из них;). Также я не решаюсь хранить текст извне, например, в текстовом файле, так как это облегчит доступ к нему.

Есть ли способ минимизировать использование памяти в таком случае?

ps инициализация очень быстрая, поэтому здесь нет проблем

1 Ответ

0 голосов
/ 05 сентября 2011

Так что это довольно большой массив, хотя и не настолько большой, чтобы вызывать какие-либо огромные предупреждения памяти (если моя математика не пошла ужасно неправильно, я считаю, что ваш массив из 10000 строк по 40 символов составляет около 0,76 МБ. что происходит в вашем приложении и вызывает такие предупреждения: загружаете ли вы большие изображения или много ресурсов?

Меня немного смущает то, как вы в данный момент храните эти элементы перед тем, как инициализировать массив. Потому что вы говорите, что не хотите хранить текст извне в текстовом файле, но вы должны держать их в каком-то файле перед инициализацией массива, если, конечно, ваши значения не генерируются на лету.

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

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

...