2013-11-02 4 views
3

Это классическая проблема с iOS - где я должен сохранять свои данные? Сейчас я написал несколько приложений для iOS и использовал основные данные, а также файлы plist. Кроме того, я обычно использую NSUserDefaults для сохранения пользовательских настроек, который по существу является одним маленьким словарем с ключами и значениями. В моем (возможно, некорректном) мнении NSUserDefaults - это самый простой способ хранения информации, требуемой глобально в приложении.Сохранение данных с помощью NSUserDefaults

У меня есть реляционные данные, которые загружаются с сервера как объект JSON и задаются вопросом, как далеко я могу продвинуть NSUserDefaults. Мои данные могут быть размером в несколько мегабайт. Я знаю, что NSUserDefaults справится с этим, поскольку я попытался, однако, есть ли какие-либо риски, связанные с сохранением данных таким образом, несмотря на то, что это не обязательно для хранения больших больших объемов данных? Будет ли отклонено мое приложение? Возможны ли проблемы с памятью и производительностью?

+0

См http://stackoverflow.com/questions/5520797/when-not-to-abuse-nsuserdefaults –

+0

и http://stackoverflow.com/questions/6173625/what-are-the -пределения-of-nsuserdefaults, особенно ответ, который упоминает «главную нить». –

+0

Я не могу добавить больше информации в ответ @PaulCezanne, но AFAIK ваше приложение не будет отклонено, если вы перейдете с NSUserDefaults для хранения больших данных. – amb

ответ

3

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

NSString* path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    path = [path stringByAppendingPathComponent:@"Private Documents"]; 
    path = [path stringByAppendingPathComponent:@"YourAppName"]; 
    [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil]; 

    NSString *filePath = [self.basePath stringByAppendingPathComponent:@"filename.json"]; 

    // Now save or load the data using NSData or an NSInputStream 
    NSInputStream *inputStream = [NSInputStream inputStreamWithFileAtPath:resource]; 
    [inputStream open]; 

    id object = [NSJSONSerialization JSONObjectWithStream:inputStream options:0 error:nil]; 

    // you can write JSON objects in a similar way 
Смежные вопросы