ios - 分解 iOS 应用程序中不同存储方法的用例

标签 ios core-data nsuserdefaults keychain

我正在学习构建 iOS swift 应用程序,如果您能指导我为应用程序的不同部分使用哪些存储选项,我将不胜感激。也许其他专业应用程序如何构建其存储的示例也会有所帮助。

具体来说,我认为我的选择是

  1. 一个独立的MySQL数据库
  2. 亚马逊 s3
  3. 核心数据
  4. nsuserdefaults
  5. key 扣

该应用程序允许用户查看/流式传输/下载/上传视频和照片到他们的帐户/应用程序,以及进行所有正常投票、自定义用户偏好等。不过,这是一个任意的应用程序示例。社交媒体应用程序存储对我来说也是一个很好的案例研究。

考虑到要实现的各种功能,我很好奇存储架构在维护 session 、持久性和安全性方面的最佳实践。

现在我所实现的只是让用户创建一个帐户并通过向 MySQL 数据库发出 http 请求来登录。我从我的 s3 上传和下载媒体。每次从数据库中重新提取用户数据。

我是否应该将内容缓存/归档到 coredata 中以使其对用户来说更快?

如果用户希望应用“记住我”,该数据存储在哪里?

我应该用钥匙串(keychain)做些什么,而不是直接调用 http 登录吗? (钥匙串(keychain)是我唯一尚未在该列表中实现的东西。其余的我已经独立搞砸了)

我还听说 nsuserdefaults 仅用于用户首选项。

谢谢大家的建议。

最佳答案

是 您应该使用核心数据以获得更好的性能。 核心数据将是完成这项工作的更好工具:

->缓存索引文件与实际存储的数据不匹配;

->简单的查询;

->漂亮而简单的面向对象代码。

NSUserDefaults

如果你想添加记住我选项你必须使用 NSUserDefaults。它将存储在 plist 文件中。有关更多信息,您应该浏览 this .

钥匙串(keychain)

密码和 key 等敏感数据应存储在钥匙串(keychain)中。 Apple 的 Keychain Services Programming Guide 指出“keychain 是一个加密的容器,它包含多个应用程序和安全服务的密码。Keychain 是安全的存储容器,这意味着当钥匙串(keychain)被锁定时,没有人可以访问其 protected 内容”。此外,在 iOS 中,每个应用程序只能访问自己的钥匙串(keychain)项。 您通过传递要查找或创建的键值对字典与钥匙串(keychain)交互。每个键代表一个搜索选项或钥匙串(keychain)中项目的一个属性。

关于ios - 分解 iOS 应用程序中不同存储方法的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28937126/

相关文章:

ios - 不使用互联网、wifi、APNS 和苹果推送通知服务器的推送通知

ios - 如何修复 "' NSInvalidArgumentException',原因: '-[__NSCFNumber caseInsensitiveCompare:]: unrecognised selector sent to instance"?

swift - 将 UIColor 存储在 CoreData 中

IOS UserDefault 无法存储在本地

xcode - 使用 Swift 的预期声明错误

iphone - NSCoding with as NSString inside a object

iPhone - 根据文字调整UILabel宽度

ios - 如何同时关闭并弹出到 View Controller

ios - 无法更改 SKView 背景颜色

SwiftUI Core Data 未正确刷新 "one to many"关系且列表未刷新