使用NSUserDefaults保存数据

4
这是一个经典的iOS问题 - 我应该把数据保存在哪里?我已经写了几个iOS应用程序,其中使用了核心数据和plist文件。此外,我通常使用NSUserDefaults来保存用户设置,它本质上是一个带有键值对的小字典。在我的(也许不正确的)观点中,NSUserDefaults是在应用程序中全局存储信息最简单的方法。
我有一些从服务器下载的关系数据作为JSON对象,想知道我能在多大程度上使用NSUserDefaults。我的数据可能会达到几兆字节的大小。我知道NSUserDefaults可以处理这个问题,因为我试过,但是以这种方式保存数据是否存在任何风险,尽管它不一定是用于存储大量数据的?我的应用程序会被拒绝吗?可能会存在内存和性能问题吗?

请参见https://dev59.com/-m035IYBdhLWcg3wQtyn。 - Paul Cezanne
翻译:和 https://dev59.com/h2025IYBdhLWcg3wKSmP 尤其是提到“主线程”的答案。 - Paul Cezanne
我无法在@PaulCezanne的答案中添加更多信息,但据我所知,如果您使用NSUserDefaults存储大量数据,您的应用程序不会被拒绝。 - amb
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接