Ios 从内存的角度来看,非持久存储的NSArray和Core数据是如何工作的?
这是一个相当简单的问题,但在我的搜索中,我还没有找到一个明确的答案 如果我有一个Ios 从内存的角度来看,非持久存储的NSArray和Core数据是如何工作的?,ios,objective-c,cocoa-touch,core-data,uiimage,Ios,Objective C,Cocoa Touch,Core Data,Uiimage,这是一个相当简单的问题,但在我的搜索中,我还没有找到一个明确的答案 如果我有一个NSArray,并向其中添加50个1MBUIImages,那么从何处扣除50MB?该应用程序将使用更多50MB内存吗?它会简单地将其存储在磁盘上吗 核心数据也是如此,我不使用持久存储,而是将其存储在内存中。核心数据存储的大小会占用那么多内存/RAM吗?还是会存在于磁盘上,并在应用程序执行完毕后被擦除 我关心的是,我是否应该在NSArray中的UIImage中存储几十兆字节,或者我是否应该使用NSCache(我宁愿不这
NSArray
,并向其中添加50个1MBUIImage
s,那么从何处扣除50MB?该应用程序将使用更多50MB内存吗?它会简单地将其存储在磁盘上吗
核心数据也是如此,我不使用持久存储,而是将其存储在内存中。核心数据存储的大小会占用那么多内存/RAM吗?还是会存在于磁盘上,并在应用程序执行完毕后被擦除
我关心的是,我是否应该在NSArray
中的UIImage
中存储几十兆字节,或者我是否应该使用NSCache
(我宁愿不这样做,因为我更希望永远不会丢失任何图像)
如果我有一个NSArray,并向其中添加50个1MB UIImages,它在哪里
那50MB会从中扣除吗?该应用程序将使用更多50MB内存吗
是。
它会简单地将其存储在磁盘上吗
否。数组存储在内存中
核心数据也是如此,它不使用持久存储
我把它存储在内存中。核心数据存储的大小会占用多少空间
到底有多少内存/RAM,还是会存在于磁盘上并被擦除
应用程序何时完成执行
是的,如果您让核心数据描述内存中的所有内容,它就会这样做
如果你认为虚拟内存系统可以将真正内存的页面交换到磁盘上,当需要时读取它们时,“内存”和“磁盘”之间的界限就会变得模糊。不过,这对iOS来说不是问题,因为可写和可写内存永远不会被交换掉
我担心我是否应该储存几十个
NSArray中UIImages的兆字节,或者我是否应该使用NSCache
当然,这些不是你唯一的选择。您可以将图像存储在文件中,并根据需要将其读入。当然,你应该仔细考虑你的应用程序使用内存和磁盘空间的方式,但是你也需要考虑网络使用、电池使用和性能。将数据存储在磁盘上通常比再次下载更可取,因为下载需要时间,可能会影响用户的数据计划,并且比仅从辅助存储读取数据消耗更多的能量。在内存中保留尽可能少的图像。您将使用比原始图像数据更多的ram。只有当你做了一些事情使它发生时,它才会被写入磁盘。像then这样的库如何声称“保证同一个URL不会被多次下载”。下载一次后,URL会发生什么变化?如果我下载几百张图像,它是否可能会使用几百MB的RAM?@DougSmith根据该项目,SDWebImage提供“一种异步内存+磁盘图像缓存,具有自动缓存过期处理功能”。我不认为这种保证是一成不变的——如果你下载了太多的图像,以至于你想要的图像被从缓存中删除,那么就必须再次下载。