我将存储一些字符串(可能是10-20).我不确定是应该使用NSUserDefaults保存它们,还是将它们写入plist.什么是最佳实践?NSUserDefaults似乎减少了代码行数,因此实现起来更快.

我想补充一点,这些字符串值将由用户添加/删除.

推荐答案

我假设一个数组,但它也适用于字典.

用户默认值、核心数据和plist都可以读/写,但如果使用plist,则需要注意放在哪个目录中.请看下面的plist部分.

核心数据我认为这太过分了,只是字符串.

NSUserDefaults:

虽然它应该只存储用户设置,但它非常快速且容易实现.

NSArray *stringsArray = [[NSArray alloc] arrayWithObjects: string1, string2, string3, nil];
[[NSUserDefaults standardUserDefaults] setObject:stringsArray forKey:@"MyStrings"];
[[NSUserDefaults standardUserDefaults] synchronize];

要从userdefaults中读取数据,请执行以下操作:

NSArray *stringsArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyStrings"];

Plist:

如果你的字符串要被修改,你需要写和读一个plist,但你不能写入应用程序的资源.

  1. 要进行读/写操作,请首先找到documents目录

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *stringsPlistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Strings.plist"];
    
  2. 创建数组(我假设字符串是string1,…)

    NSArray *stringsArray = [[NSArray alloc] arrayWithObjects: string1, string2, string3, nil];
    
  3. 将其写入文件

    [stringsArray writeToFile:stringsPlistPath atomically:YES];
    

阅读plist:

  1. 找到文档目录

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *stringsPlistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Strings.plist"];
    
  2. 请阅读:

    NSArray *stringsArray = [NSArray arrayWithContentsOfFile:stringsPlistPath];
    

Objective-c相关问答推荐

覆盖@property setter 和无限循环

在 Objective-C 中实现纯虚方法

iOS 应用 Display Recorder 如何在不使用私有 API 的情况下录制屏幕?

判断是否显示 UIAlertView

是否需要 ARC 中的 NSNotificationCenter removeObserver?

从 NSString 创建 SHA1 哈希

声明变量id和NSObject *有什么区别?

Objective-C:集合枚举块中的 continue继续?

混合 Objective-C 和 C++

lldb 无法打印变量值并显示错误:对 'id' 的引用不明确

在 iOS 7 中检测后台应用刷新的用户设置

iOS 内存分配 - 一个应用程序可以使用多少内存?

无法在 Interface Builder (Xcode 5) 中创建与子视图的出口连接

Objective-C 中的 alloc、init 和 new

如何在Objective C(NSRegularExpression)中编写正则表达式?

仅在 UIView 顶部的圆角

在 UITableView 的 iOS 文档目录中列出保存的文件?

分组的 UITableView 在底部有 20px 的额外填充

请求访问相机胶卷的权限

如何判断 NSString 的最后一个字符