Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从内存的角度来看,非持久存储的NSArray和Core数据是如何工作的?_Ios_Objective C_Cocoa Touch_Core Data_Uiimage - Fatal编程技术网

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个1MB
UIImage
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提供“一种异步内存+磁盘图像缓存,具有自动缓存过期处理功能”。我不认为这种保证是一成不变的——如果你下载了太多的图像,以至于你想要的图像被从缓存中删除,那么就必须再次下载。