在 Swift 中的 cellForRow(at:IndexPath) 中访问 NSUserDefaults,内存使用情况
accessing NSUserDefaults within cellForRow(at:IndexPath) in Swift, memory usage
在 cellForRow(at:IndexPath
方法中从 NSUserDefaults
检索数据是否占用大量内存?代码如下:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let recentFavorite = UserDefaults.standard.string("recentlyStoredFavorite")
if self.favorite == recentFavorite {
cell.imgForFavorite = self.imgForFavorite
}
}
或者我应该将 UserDefaults
中的值保存在 viewWillAppear
中并在 cellForRow
中使用它吗?
请帮助我理解这两个选项对内存的影响。
根据 Apple
At runtime, you use UserDefaults objects to read the defaults that
your app uses from a user’s defaults database. UserDefaults caches the
information to avoid having to open the user’s defaults database each
time you need a default value.
您应该 'ok' 来检索 cellForRow 中的信息,因为它可能位于内存中的字典中(假设),由您提供的密钥获取,但是对于 vadian 的观点,您可以直接将其放入在模型中或 属性 并消除假设。
此外,请考虑该数据是否会被另一个进程更改,以及您是否需要观察 UserDefaults 键。
在 cellForRow(at:IndexPath
方法中从 NSUserDefaults
检索数据是否占用大量内存?代码如下:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let recentFavorite = UserDefaults.standard.string("recentlyStoredFavorite")
if self.favorite == recentFavorite {
cell.imgForFavorite = self.imgForFavorite
}
}
或者我应该将 UserDefaults
中的值保存在 viewWillAppear
中并在 cellForRow
中使用它吗?
请帮助我理解这两个选项对内存的影响。
根据 Apple
At runtime, you use UserDefaults objects to read the defaults that your app uses from a user’s defaults database. UserDefaults caches the information to avoid having to open the user’s defaults database each time you need a default value.
您应该 'ok' 来检索 cellForRow 中的信息,因为它可能位于内存中的字典中(假设),由您提供的密钥获取,但是对于 vadian 的观点,您可以直接将其放入在模型中或 属性 并消除假设。
此外,请考虑该数据是否会被另一个进程更改,以及您是否需要观察 UserDefaults 键。