NSUserDefaults против sqlite3 - PullRequest
2 голосов
/ 30 мая 2009

У меня есть небольшое приложение для iPhone, в котором хранится список объектов. Пользователь может добавлять и удалять объекты, но этот список останется довольно небольшим (у большинства пользователей будет 10-30 объектов). С NSUserDefaults работать намного проще, но будет ли sqlite3 быстрее? Будет ли заметна разница между 30 записями?

Ответы [ 2 ]

5 голосов
/ 30 мая 2009

NSUserDefaults для пользовательских настроек, обычно базовых объектов, таких как NSString или NSNumber. Sqlite, сериализация коллекции объектов в списке свойств или Базовые данные - все это допустимые параметры для хранения пользовательских данных, таких как созданные вами объекты модели.

Вы не увидите разницу в скорости, но все же лучше выбрать правильный механизм для того, что вы делаете. Если это просто настройки, используйте NSUserDefaults, в противном случае я бы сериализовал ваши объекты в plist. Если вы новичок в Какао, я бы сначала отказался от Core Data и даже от sqlite, чтобы дать себе возможность сначала изучить основы.

2 голосов
/ 31 мая 2009

Попробуйте с протоколом NSCoding. Объявите свой класс для реализации протокола NSCoding:

@interface Person : NSObject <NSCoding>

Предыдущая строка обещает реализовать следующие методы:

-(id)initWithCoder:(NSCoder *)coder;
-(void)encodeWithCoder:(NSCoder *)coder;

Ваши методы должны выглядеть примерно так:

-(void)encodeWithCoder:(NSCoder *)coder {
  [super encodeWithCoder:coder];
  [coder encodeObject:firstName forKey:@"firstName"];
  [coder encodeObject:lastName forKey:@"lastName"];
}

-(id)initWithCoder:(NSCoder *)coder {
  [super init];
  firstName = [[coder decodeObjectForKey:@"firstName"] retain];
  lastName = [[coder decodeObjectForKey:@"lastName"] retain];
  return self;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...