iOS应用程序(大多数情况下)是用Objective-C编写的,它是C的一个子集,因此是一种数据管理语言,与Android / Java不同。
在Android中,您可以通过在XML android清单中添加这一行来增加堆大小:
<application android:largeHeap="true"/>
是否有iOS版本可以做这样的事情?
答案 0 :(得分:4)
在iOS中,您无法控制内存。
全部由内核管理。所以你不能增加堆大小。
正如评论中所指出的,内存管理在iOS中有不同的概念。
你可以获得尽可能多的内存,但如果应用程序使用了大量内存,它将被系统杀死。
既然您已经解释了目标,就不应该将大文件下载到内存中,这会造成麻烦。相反,您应该在收到响应时将其直接保存到磁盘。
答案 1 :(得分:2)
看看Apple&#34; Memory Usage Performance Guidelines&#34;有关iOS如何管理交换空间的解释。
虽然OS X支持后备存储,但iOS不支持。在iPhone应用程序中,磁盘上已有的只读数据(例如代码页)只是从内存中删除,并根据需要从磁盘重新加载。操作系统永远不会从内存中删除可写数据。相反,如果可用内存量低于某个阈值,系统会要求正在运行的应用程序自动释放内存以为新数据腾出空间。无法释放足够内存的应用程序将被终止。
iOS尝试为每个应用程序提供与操作系统可以备用的一样多的设备内存。但是,每个应用程序仅限于设备的物理内存。没有选择分配更大的块并期望它们根据需要交换到磁盘。
因此,在iOS中操作堆大小并不是一个有意义的概念。每个应用程序已经拥有操作系统可以提供的最大堆。相反,应用必须尝试最小化其内存占用,以保留在主机设备的可用空间内。这意味着清除内存缓存以响应内存警告,对磁盘上资源的流式访问(如注释中建议的@CouchDeveloper),以及最小化整体使用的内存量。
作为额外的复杂功能,iOS会尝试使用内存。未使用的内存是浪费的容量,操作系统可以更好地服务用户,使更多的应用程序暂停和内存而不是终止。因此,尝试测量可用的可用内存不会产生有意义的结果。由于设备在可用内存上运行不足,因此其他应用程序将减少其使用以响应内存警告或完全终止。