2014-12-25 4 views
2

бит noob здесь, но каков наилучший способ сохранить простые переменные/массивы для приложения? Например, у меня есть приложение, у которого есть массив friendList, и я хочу, чтобы он загружался каждый раз, когда приложение запускается? Это будет NSKeyedArchiver? NSUserDefualts? Или каким-то другим способом? Другим примером является то, что у меня есть простая переменная postCount для отслеживания количества сделанных сообщений, это необходимо сохранить при выходе и загрузке. Какой был бы лучший подход? Благодаря!Где хранить локальные переменные? NSKeyedArchiver или NSUserDefaults?

ответ

4

NSUserDefaults лучше всего подходит для небольшого количества данных. Если данные небольшие, лучшим вариантом является NSUserDefaults else use NSKeyedArchiver.

В вашем случае массив может содержать огромное количество данных, поэтому для этого я предпочитаю NSKeyedArchiver. Для хранения postCount вы можете использовать NSUserDefaults.

+0

Благодарим вас за ответ. именно то, что я искал. Счастливого Рождества! – Kex

+0

@Kex: С Рождеством Христовым ... –

3

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]; 
+1

все в порядке, просто хотел проверить, что общего программирования, где для хранения простых данных программы, как это. Спасибо за ваш ответ. Счастливого Рождества! – Kex

+0

@Kex С Рождеством! – user3575114

2

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

Если вы хотите хранить массивы и словари, сериализация с помощью NSKeyedArchiver является разумным решением.

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

Правильные механизмы сохранения, такие как CoreData, Realm.io, Mantle, дают вам гораздо лучший контроль над использованием памяти ваших объектов модели, лучше масштабируются и когда ваши объекты модели меняются, тогда есть поддержка для надлежащие миграции.

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