Каковы лучшие методы для кэширования данных? - PullRequest
2 голосов
/ 26 января 2012

Каковы оптимальные методы кэширования данных в приложениях iOS, подключенных к источнику данных через веб-сервис?

Ответы [ 4 ]

4 голосов
/ 27 января 2012

Вы должны посмотреть NSCache

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSCache_Class/Reference/Reference.html

Объект NSCache - это контейнер, похожий на коллекцию, или кеш, который хранит пары ключ-значение, аналогичные классу NSDictionary. Разработчики часто включают кэши для временного хранения объектов с переходными процессами данные, которые дорого создавать. Повторное использование этих объектов может обеспечить преимущества производительности, потому что их значения не должны быть пересчитывается. Тем не менее, объекты не являются критическими для приложения и может быть отброшен, если память ограничена. Если отброшены, их значения при необходимости придется заново вычислять.

1 голос
/ 26 января 2012

Зависит от типа данных

для двоичных данных (файлов) :
- Кэшируйте ваши файлы в папке Cache, используя NSFileManager и NSData writeToFile:

для небольших объемов данных (ascii / utf8) :
- используйте NSUserDefaults

для больших объемов данных (ascii / utf8) :
- Использовать базу данных sqlite3

0 голосов
/ 28 января 2012

Если вы используете NSURLConnection или все, что использует NSURLRequest, кеширование уже позаботится о вас:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-169425

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Concepts/CachePolicies.html#//apple_ref/doc/uid/20001843-BAJEAIEE

Byпо умолчанию они используют политики кэширования протокола, которые для веб-службы будут HTTP-заголовками, которые он возвращает.Это также верно, IIRC, для ASIHttpRequest.

Core Data также реализует свое собственное кэширование строк и объектов, которое работает довольно хорошо.Таким образом, реальность здесь заключается в том, что вам действительно не нужно беспокоиться о кэшировании, когда дело доходит до этих вещей - это оптимизирует использование вами таких вещей, как NSDateFormatter, которое становится важным (их дорого создавать, они не безопасны для потоков и т. Д.)...)

А если есть сомнения, используйте инструменты, чтобы найти узкие места и задержки

0 голосов
/ 26 января 2012

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

Если у вас небольшой объем данныхВы можете сохранить это в словаре или массиве, просто записать и прочитать. Но такое решение может стать медленным, если у вас много данных;эти чтения и записи могут занять много времени.А сброс грязного кэша на диск означает запись всего объекта.

Вы можете записывать отдельные файлы, но опять же, если у вас много файлов, которые также могут стать проблемой производительности.

Другой альтернативой является использование CoreData.Если у вас много данных (скажем, много объектов), имеет смысл определить, как они выглядят как сущности CoreData.Затем вы просто сохраняете и извлекаете объекты по мере необходимости, возвращаясь к извлечению из веб-службы (и затем кешированию), если данные не локальны.Вы также можете легко и эффективно оптимизировать другие задачи управления кешем (например, срок действия неиспользуемых записей) с помощью CoreData.

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

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