是否可以经常访问NSUserDefaults/UserDefaults?

Qua*_*ees 1 nsuserdefaults ios swift swiftyuserdefaults

我有一个登录视图控制器,用户可以在其中输入他们的首选项,例如他是否要激活某些UI功能.

我将这些存储为getter和setter直接访问的变量UserDefaults,以下是其中一个示例:

class Preferences {
        static var likesSpaghetti : Bool {
            set (likesSpaghetti) {
                UserDefaults.standard.set(likesSpaghetti, forKey: "likesSpaghetti")
            }

            get {
                return UserDefaults.standard.bool(forKey: "likesSpaghetti")
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我想要设置其中任何一个时,我只需编写如下内容:

Preferences.likesSpaghetti = false

现在,我的问题是:每次用户轻拂开/关开关时我都可以设置这些变量,还是应该将首选项保持为局部变量,然后才设置:

Preferences.likesSpaghetti = spaghettiSwitch.isOn

当用户离开时loginViewController?每次访问都是UserDefault即时快速的吗?或是它是否滞后,应该仁慈地使用?

关闭这个问题后编辑:所以我学会了不要过早地优化,并且它可能在几十个元素的范围内.所以我应该没事.每次用户修改任何内容时我都会更新,以便我的代码更容易阅读和维护.

感谢大家!

rma*_*ddy 6

你的代码很好.在实际遇到问题之前,不要担心这种优化.信任UserDefaults是巧妙地实施的(因为它是).关于设置像Boolin 一样简单的东西没有什么"滞后" UserDefaults.

您还希望查看与此问题相关的另一个答案:何时以及为什么要使用NSUserDefaults的synchronize()方法?