swift知识点(iOS)

ios swift App 沙盒文件,ios 存储最佳体验

2021-09-26  本文已影响0人  荔枝lizhi_iOS程序猿

查了很多ios 沙盒存储,都是比较老的,不符合现在的情况,看了篇国外的文章感觉还可以,做下记录同时分享给大家,共同讨论下;From @lizh荔枝

原文地址:https://swiftlyanand.medium.com/ios-storage-best-practices-294fca83ad9

看图说明


1_TsHakh.png

✅Store only those files in here which should be visible to the user.Contents of this folder is visible in the “Files” application provided it supports “Open in place” and “File sharing” is enabled.Content of the directory is persisted and included in the iCloud and iTunes backups. Disk space used in this directory is reported in the storage settings UI under your app’s “Documents and Data” total.
✅Few benefit of exposing the “Document directory” are files become visible in “Files” application and user can find their files in spotlight.
✅You can store files at the top level or you can create sub-directories. If you choose to create a sub-directory then keep in mind that not all names are allowed for directory name. I guess few directory names are reserved by Apple as I was not able to create an “Inbox” directory but rest all names that I tried worked.
✅ 只存储那些文件在这里,应该是可见的用户。这个文件夹的内容在“文件”应用程序中可见,前提是它支持“就地打开”和“文件共享”功能。目录的内容被持久化并包含在iCloud和iTunes备份中。该目录中使用的磁盘空间在应用程序的“文档和数据”总数下的存储设置UI中报告。
✅ 公开“文档目录”的好处是文件可以在“文件”应用程序中看到,用户可以在聚光灯下找到他们的文件。
✅您可以在顶层存储文件,也可以创建子目录。如果您选择创建子目录,那么请记住,不是所有的名称都允许作为目录名。我猜苹果保留了一些目录名,因为我不能创建一个“收件箱”目录,但我尝试过的所有名称都是有效的。

❗️❗️❗️注意 -要启用“就地打开”,在Info中添加“应用程序支持iTunes文件共享”或“UIFileSharingEnabled”键,值为“YES”。在Info.plist中添加“LSSupportsOpeningDocumentsInPlace”或“支持就地打开文档”键,值为“YES”,以启用“文件共享”。


2.png

数据库可以放在此文件夹

✅ Store files in here that are required for your app but should never be visible to the user like your app’s database file.You can store files in here at the top level or create sub-directories.Content of the directory is persisted and included in the iCloud and iTunes backups.You can opt files out if they don’t need to be backed-up.Disk space used in the application support directory is reported in the storage settings UI under your app’s “Documents and Data” total.

✅ 在这里存储你的应用程序需要的文件,但不应该对用户可见,比如你的应用程序的数据库文件。您可以在这里的顶层存储文件或创建子目录。目录的内容被持久化并包含在iCloud和iTunes备份中。如果文件不需要备份,你可以选择退出。应用程序支持目录中使用的磁盘空间在应用程序的“文档和数据”总数下的存储设置UI中报告。

❗️❗️❗️Note — Unlike other directories mentioned here, “Application support” directory is not present by default in you application’s “Data container” and you need to create it first.
注意:不像这里提到的其他目录,“应用程序支持”目录在应用程序的“数据容器”中默认不存在,你需要首先创建它。

缓存文件

✅Stores files in here that can be discarded when the space is low.This is a good location for any content that can be re-downloaded when needed.Contents of this directory is not included in the backups.When the device is low on disk space then iOS can help by clearing caches.Files will never be removed from your cache if your application is running and OS will start by clearing caches from apps that haven’t been used in a while.Files stored on the caches directory is not reported in the storage settings UI under your app’s “Documents and Data” total.
✅在这里存储可以在空间不足时丢弃的文件。对于任何可以在需要时重新下载的内容,这都是一个很好的位置。备份文件中不包含此目录的内容。当设备的磁盘空间不足时,iOS可以帮助清理缓存。如果你的应用程序正在运行,文件将永远不会从你的缓存中删除,操作系统将从一段时间没有使用过的应用程序中清除缓存。存储在缓存目录下的文件在你的应用程序的“文档和数据”总数下的存储设置UI中没有报告。

关闭APP后,系统会自动删除

✅Put files in here that your won’t be needing for extended period of time.Even though operating system will periodically remove these files when your app is not running, it’s best to remove them when you are done with them.Like the cache directory, tmp directory is not backed up and is not reported in your apps “Documents and Data” total.
✅把你以后不需要的文件放在这里。尽管操作系统会在应用程序不运行时定期删除这些文件,但最好是在使用完它们后删除它们。和缓存目录一样,tmp目录没有备份,也没有在你的应用程序“文档和数据”总数中报告。

其他附加说明👇🔻

未命名文件(1).jpg

保存应用程序的所有偏好设置iOS的Settings(设置),我们不应该直接在这里创建文件,而是需要通过NSUserDefault这个类来访问应用程序的偏好设置。
iTunes会自动备份该文件目录下的内容。
比如说:是否允许访问图片,是否允许访问地理位置......

1.系统偏好目录.
2.储存程序的偏好设置数据资源(Plist文件).

    // 沙盒根目录
    NSString *homePath = NSHomeDirectory();
    // Documents目录
    NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
    // Library目录
    NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
    // Caches目录
    NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
    // Preferences目录
    NSString *preferencesPath = NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES).firstObject;
    // Application Support目录
    NSString *applicationSupportPath = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES).firstObject;
    // Temp目录
    NSString *tempPath = NSTemporaryDirectory();

注:此处列出常用的几种获取目录路径的函数方法,更多详细内容可参看[iOS数据持久化]系列的NSBundle/NSFileManager等.

参考 : https://www.jianshu.com/p/9a3532129adc

上一篇下一篇

猜你喜欢

热点阅读