从内存角度来看,NSArray和Core Data如何与非持久性存储一起工作?

时间:2014-04-14 18:10:10

标签: ios objective-c cocoa-touch core-data uiimage

这是一个相当简单的问题,但我无法在搜索中找到明确的答案。

如果我有一个NSArray,并为其添加50个1MB UIImage,那么50MB会从哪里扣除?该应用程序将使用50MB以上的内存吗?它只是将它存储在磁盘上吗?

同样适用于Core Data,而不是使用持久性存储我将其存储在内存中。 Core Data存储的大小是否会占用那么多的内存/ RAM,还是会存在于磁盘上并在应用程序完成执行时被擦除?

我担心我是否应该在UIImage中的NSArray中存储数十兆字节,或者我是否应该使用NSCache(I' d而不是因为我不想丢失任何图像。)

1 个答案:

答案 0 :(得分:0)

  

如果我有一个NSArray,并为其添加50个1MB UIImages,那么它在哪里   50MB从中扣除?该应用程序将使用50MB以上的内存吗?

  

它只是将它存储在磁盘上吗?

不。数组存储在内存中。

  

Core Data也是如此,而不是使用持久性存储   我把它存放在内存中。核心数据存储的大小是否会占用   确切地说那么多的内存/ RAM还是会存在于磁盘上并被擦除   当应用程序完成执行时?

是的,如果您告诉Core Data了解内存中的所有内容,那就是它将要做的事情。

"记忆"之间的界限和"磁盘"如果您认为虚拟内存系统可以将实际内存页面交换到磁盘并在需要时将其读回,则可能会有点模糊。但是,这不是iOS的问题,因为iOS doesn't provide a VM backing store和可写内存永远不会被换出。

  

我担心我是否应该存储数十个   在NSArray中的UIImages中的兆字节,或者如果我应该使用NSCache

当然,这些不是你唯一的选择。您可以将图像存储在文件中并根据需要读取它们。当然,您应该考虑应用程序使用内存和磁盘空间的方式,但您还需要考虑网络使用,电池使用和性能。将数据存储在磁盘上通常比再次下载更可取,因为下载需要时间,可能会影响用户的数据计划,并且比仅从二级存储中读取数据需要更多的能量。