我的应用程序从 Web 下载图像,显然出于性能原因,我需要将其缓存在我的设备上。所以我的问题是:存储图片的最佳位置在哪里?
我看到很多人使用 NSDocumentDirectory 但苹果说:
Critical data should be stored in the /Documents directory. Critical data is any data that cannot be recreated by your app, such as user documents and other user-generated content.
所以我认为图像不属于此类。苹果还说:
Support files include files your application downloads or generates and that your application can recreate as needed. The location for storing your application’s support files depends on the current iOS version.
所以也许 NSApplicationSupportDirectory 是存储它的最佳位置。
但我还看到了 NSDownloadsDirectory 和 NSPicturesDirectory。缓存目录对我不利,因为它会在应用程序更新后被删除。
所有这些东西让我很困惑。什么是正确的位置,为什么?
最佳答案
好问题!因为你不想使用 NSCachesDirectory , NSApplicationSupportDirectory我认为会是更好的选择。
根据 Apple's File System Programming Guide :
您应该将应用文件放在哪里
为防止 iOS 设备上的同步和备份过程花费很长时间,请选择将文件放置在应用程序主目录中的位置。存储大文件的应用程序会减慢备份到 iTunes 或 iCloud 的过程。这些应用程序还会占用用户的大量可用存储空间,这可能会促使用户删除该应用程序或禁止将该应用程序的数据备份到 iCloud。考虑到这一点,您应该根据以下准则存储应用数据:
将用户数据放入<Application_Home>/Documents/ .用户数据是您的应用无法重新创建的任何数据,例如用户文档和其他用户生成的内容。
以两种方式之一处理支持文件——您的应用程序下载或生成并可根据需要重新创建的文件:
在 iOS 5.0 及更早版本中,将支持文件放在 <Application_Home>/Library/Caches 中目录以防止它们被备份
在 iOS 5.0.1 及更高版本中,将支持文件放在 <Application_Home>/Library/Application Support 中目录并应用 com.apple.MobileBackup扩展属性给他们。此属性可防止将文件备份到 iTunes 或 iCloud。如果您有大量支持文件,您可以将它们存储在自定义子目录中,并将扩展属性仅应用于该目录。
将数据缓存文件放在<Application_Home>/Library/Caches中目录。您应该放在该目录中的文件示例包括(但不限于)数据库缓存文件和可下载内容,例如杂志、报纸和 map 应用程序使用的内容。您的应用应该能够妥善处理缓存数据被系统删除以释放磁盘空间的情况。
<Application_Home>/tmp目录。临时数据包括您不需要长时间保留的任何数据。请记得在用完这些文件后将其删除,以免它们继续占用用户设备上的空间。 NSApplicationSupportDirectory : 应用程序支持文件的位置(库/应用程序支持)。
NSDownloadsDirectory : 用户下载目录的位置。
NSPicturesDirectory : 用户图片目录的位置 (~/Pictures)
我对这个问题的理解是,用户不会处理您缓存的照片。所以它们是支持您的应用程序的文件,而不是用户的照片或下载。如果您有一个下载管理器应用程序,您可以在其中将用户下载的文件分类为图片、音乐、视频等,那么这些文件夹将适合使用。
关于ios - 在 iOS 设备中保存从 Web 下载的图像的最佳位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20299247/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里