В моем приложении для фитнеса я храню различные значения, которые должны быть доступны во всем приложении в разной степени. цели, max, min, имена классов, fontColors, штрихи, gradientColors и т. д. Поскольку приложение создается во время обучения, я использую сочетание всех вышеперечисленных методов хранения - правильный беспорядок. К, цели переменные (например, 10 000 шагов или целевой вес) представлены во всем приложении и часто используются в коде, но пользователь не меняет их очень часто. Крайне важно, чтобы цели сохранялись и во всех версиях обновлений, поскольку пользователь был бы раздражен, если бы он/она должен был добавить их снова. Какова наилучшая практика для хранения переменных цели, их может быть 20 или около того?NSUserDefault vs Global Variable vs CD vs Singleton - конкретный пример
ответ
Общее правило заключается в следующем: информация, которая может быть легко воссозданы должны быть сохранены в памяти, тогда как пользователь вводит информацию/прогресс должен сохраняться где-то.
Основные данные vs NSUserDefaults. Храните основную информацию (например, , String
и т. Д.) В NSUserDefaults (это самый простой способ) и сложную информацию (массивы, сложные объекты, отношения объектов) в Core Data (посмотрите на Realm - это лучшая альтернатива Core Data) ,
Глобальная переменная vs Singleton. Глобальные переменные в большинстве случаев являются очень плохими. Они должны принадлежать определенному классу, и при необходимости вы можете создать в нем один синглтон (пример - class AppSettings
, который имеет в нем один синглтон и управляет базовыми настройками приложения).
Учитывая, что у вас есть 20 целей, которые могут быть изменены пользователем (поэтому их нельзя воссоздать) Я рекомендую вам использовать CoreData или Realm.
Также обратите внимание на HealthKit - это может быть хорошей идеей для сохранения прогресса пользователя (например, сжигаемых калорий).
Первое, что нужно задать себе: что делает мое приложение? Это звучит как приложение для фитнеса, поэтому данные о пригодности должны храниться в вашей модели данных, которая является хранилищем для любых данных, которые соответствуют требованиям бизнес-логики вашего приложения (т. Е. Отслеживают данные о пригодности моих пользователей).
Существует несколько механизмов сохранения, которые люди используют для своих моделей данных, самым простым из которых является хранение ваших данных в словаре, и чтение/запись в файловую систему - это было бы приемлемо для прототипа, но как вы добавляете функции, и ваша модель данных становится более сложной, вам нужно будет рассмотреть NSCoding или CoreData.
Но если вы храните данные о пригодности, вы можете подумать о Healthkit, который позволяет хранить данные о пригодности и здоровье напрямую, позволяя вам делиться различными видами медицинских данных с другими приложениями.
NSUserDefaults - это, как правило, место для хранения пользовательских настроек или любых данных, которые находятся за пределами вашей бизнес-логики. Если ваше приложение очень простое, вы захотите сохранить свою модель данных из NSUserDefaults по разным причинам.
Вот как вы могли бы сделать это с помощью словаря:
class MyDataModel {
var goalSteps : Int {
get { return dict["goal1"] as? Int ?? 0 }
set { dict["goal1"] = newValue }
}
var goal2 : String {
get { return dict["goal2"] as? String ?? "" }
set { dict["goal2"] = newValue }
}
// ... Etc etc ...
// Load the data model from a path
init(path: String)
{
dict = NSMutableDictionary(contentsOfFile: path)!
}
func Save(toPath : String) {
dict.writeToFile(toPath, atomically: true)
}
private var dict = NSMutableDictionary()
}
- 1. cd vs! Cd vs% cd в IPython
- 2. NSHTTPCookieStorage Vs keychain vs NSUserdefault
- 3. C++ singleton vs. global static object
- 4. MySQL wait_timeout Variable - GLOBAL vs SESSION
- 5. Python Pandas global vs pass variable
- 6. MSAccess: Global vs Local Variable Declaration
- 7. Singleton Vs Singleton Завод
- 8. tcsh: ls vs pwd vs cd
- 9. ASP.NET MVC Session vs Global vs Cache
- 10. ECB vs global vs cscope .. in emacs
- 11. API Design: Global Variable vs Передача объекта вокруг
- 12. Javascript Local vs Global
- 13. Static vs global
- 14. Android: Intent vs Global
- 15. Singleton vs Dependency Injection
- 16. pthread_key_t vs local variable
- 17. Php (eval vs call_user_func vs variable functions ...)
- 18. Зависимость injeciton vs global factory
- 19. this.key vs variable performace
- 20. global vs $ GLOBALS in php
- 21. Python local vs global variables
- 22. Ninject Singleton vs CS Singleton
- 23. TCL/Expect variable vs $ variable
- 24. Session vs singleton pattern
- 25. Spring: Singleton VS Prototype
- 26. Singleton vs static members
- 27. Singleton vs Single Thread
- 28. Singleton vs Cache ASP.NET
- 29. Javaee mbean vs singleton
- 30. Singleton Vs ServiceLocator
Хорошо, знаете ли вы, какие методы хранения могут быстрее получить данные? например, CoreData vs NSUserDefault? Предположим, что я хочу сохранить целевой показатель цели/цели пользователя 100. Как быстро получить данные? – KML
Оба из них будут получать простые строковые данные постоянно, поэтому в вашем приложении не будет «замораживания». Однако NSUserDefaults может быть немного быстрее для хранения однострочного значения. –
Один совет, который я должен вам дать: не хранить изображения в базовых данных - это наверняка даст вам накладные расходы. Используйте 'UIImagePNGRпредставление (изображение) .writeToFile (urlPath, atomically: true)' для хранения изображения и 'let data = NSData (contentsOfFile: cachePathForKey (key)); let image = UIImage (data: data) 'для извлечения. –