经常访问NSUserDefaults/UserDefaults可以吗?
Is it fine to access NSUserDefaults/UserDefaults frequently?
我有一个登录视图控制器,用户可以在其中输入他们的首选项,例如他是否要激活某些 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")
}
}
}
因此,每当我想设置其中任何一个时,我只需编写如下内容:
Preferences.likesSpaghetti = false
现在,我的问题是:我可以在每次用户轻按 on/off 开关时设置这些变量,还是应该将首选项表示为局部变量然后只设置:
Preferences.likesSpaghetti = spaghettiSwitch.isOn
当用户 segue 离开 loginViewController
时? UserDefault
的每次访问都是即时快速的吗?还是它很慢,应该仁慈地使用?
关闭此问题后编辑:所以我学会了不要过早优化,在几十个元素的范围内可能就可以了。所以我应该没事。我将在每次用户修改任何内容时进行更新,以便我的代码更易于阅读和维护。
谢谢大家!
你的代码很好。在您真正遇到问题之前,不要担心此类优化。相信 UserDefaults
的实现很巧妙(因为它确实如此)。在 UserDefaults
.
中设置像 Bool
这样简单的东西没有什么 "laggy"
您还希望查看我与此问题相关的另一个答案:
实际上 userDefaults(它最初是一个 plist 文件)用于存储应用程序设置的目的,如果您必须创建变量的轻量级内容可能会消耗内存配置其中的许多,除了不直接将新设置更改反映为用户所做的默认设置外,还可能导致在更改时发生不可预期的旧设置,例如本地化警报或部分代码(例如推送通知回调)检查用户认为已经反映的相同设置
添加到@rmaddy @Sh_Khan,如果你考虑它的安全方面,NSUserDafault 正是用于特定于应用程序的细节,例如设置、首选项或一些对安全不敏感的配置虽然不建议将密码、用户名和敏感数据等内容存储在 UserDefaults 中。您应该使用像钥匙串这样的服务,它是为此类数据加密的。
我有一个登录视图控制器,用户可以在其中输入他们的首选项,例如他是否要激活某些 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")
}
}
}
因此,每当我想设置其中任何一个时,我只需编写如下内容:
Preferences.likesSpaghetti = false
现在,我的问题是:我可以在每次用户轻按 on/off 开关时设置这些变量,还是应该将首选项表示为局部变量然后只设置:
Preferences.likesSpaghetti = spaghettiSwitch.isOn
当用户 segue 离开 loginViewController
时? UserDefault
的每次访问都是即时快速的吗?还是它很慢,应该仁慈地使用?
关闭此问题后编辑:所以我学会了不要过早优化,在几十个元素的范围内可能就可以了。所以我应该没事。我将在每次用户修改任何内容时进行更新,以便我的代码更易于阅读和维护。
谢谢大家!
你的代码很好。在您真正遇到问题之前,不要担心此类优化。相信 UserDefaults
的实现很巧妙(因为它确实如此)。在 UserDefaults
.
Bool
这样简单的东西没有什么 "laggy"
您还希望查看我与此问题相关的另一个答案:
实际上 userDefaults(它最初是一个 plist 文件)用于存储应用程序设置的目的,如果您必须创建变量的轻量级内容可能会消耗内存配置其中的许多,除了不直接将新设置更改反映为用户所做的默认设置外,还可能导致在更改时发生不可预期的旧设置,例如本地化警报或部分代码(例如推送通知回调)检查用户认为已经反映的相同设置
添加到@rmaddy @Sh_Khan,如果你考虑它的安全方面,NSUserDafault 正是用于特定于应用程序的细节,例如设置、首选项或一些对安全不敏感的配置虽然不建议将密码、用户名和敏感数据等内容存储在 UserDefaults 中。您应该使用像钥匙串这样的服务,它是为此类数据加密的。