бит noob здесь, но каков наилучший способ сохранить простые переменные/массивы для приложения? Например, у меня есть приложение, у которого есть массив friendList, и я хочу, чтобы он загружался каждый раз, когда приложение запускается? Это будет NSKeyedArchiver? NSUserDefualts? Или каким-то другим способом? Другим примером является то, что у меня есть простая переменная postCount для отслеживания количества сделанных сообщений, это необходимо сохранить при выходе и загрузке. Какой был бы лучший подход? Благодаря!Где хранить локальные переменные? NSKeyedArchiver или NSUserDefaults?
ответ
NSUserDefaults лучше всего подходит для небольшого количества данных. Если данные небольшие, лучшим вариантом является NSUserDefaults
else use NSKeyedArchiver
.
В вашем случае массив может содержать огромное количество данных, поэтому для этого я предпочитаю NSKeyedArchiver. Для хранения postCount
вы можете использовать NSUserDefaults.
NSUserDefaults
класса предоставляет удобные методы для доступа к общим типам, таким как поплавков, парные, целых, Booleans и URL-адрес. Объект по умолчанию должен быть список по свойства, то есть экземпляр (или для коллекций комбинации экземпляров): NSData
, NSString
, NSNumber
, NSDate
, NSArray
или NSDictionary
. Если вы хотите сохранить какой-либо другой тип объекта, вы должны архивировать его, чтобы создать экземпляр NSData
. Архивация и сериализация - это два способа, позволяющих создавать независимые от архитектуры байтовые потоки иерархических данных. Затем потоки байтов могут быть записаны в файл или переданы другому процессу, возможно, по сети. Когда поток байтов декодируется, иерархия восстанавливается. Архивы предоставляют подробную запись коллекции взаимосвязанных объектов и значений. Сериализация записывает только простую иерархию значений свойства-списка.
Вы можете хранить NSArray
используя NSUserDefault
но лучший подход является Вы должны использовать что-то вроде NSKeyedArchiver
сериализовать массив к NSData
, сохраните его в NSUserDefaults
, а затем использовать NSKeyedUnarchiver
десериализовать позже:
NSData *serialized = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[[NSUserDefaults standardUserDefaults] setObject:serialized forKey:@"myKey"];
//...
NSData *serialized = [[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:serialized];
все в порядке, просто хотел проверить, что общего программирования, где для хранения простых данных программы, как это. Спасибо за ваш ответ. Счастливого Рождества! – Kex
@Kex С Рождеством! – user3575114
Небольшие объемы данных, связанных с настройками приложений, легко сохраняются в UserDefaults. Но не стоит вводить имена пользователей и пароли - вот для чего нужен брелок.
Если вы хотите хранить массивы и словари, сериализация с помощью NSKeyedArchiver является разумным решением.
Однако, это одна из тех вещей, которые являются инженерным компромиссом, если у вас есть большие объемы данных или структуры данных, которые могут измениться, тогда использование правильного механизма сохранения является лучшей идеей.
Правильные механизмы сохранения, такие как CoreData, Realm.io, Mantle, дают вам гораздо лучший контроль над использованием памяти ваших объектов модели, лучше масштабируются и когда ваши объекты модели меняются, тогда есть поддержка для надлежащие миграции.
Это действительно зависит от того, что вы сохраняете, как оно будет использоваться и как это будет развиваться.
Благодарим вас за ответ. именно то, что я искал. Счастливого Рождества! – Kex
@Kex: С Рождеством Христовым ... –