由于内存不足,延迟iOS应用程序终止

时间:2013-12-29 22:02:13

标签: c++ ios memory

我正在开发一种语言应用程序,偶尔需要在一段时间内(通常在30秒内)分配大量内存。不幸的是,iOS发送低内存警告,有时会终止应用程序(大约5%的时间)。当然我不能依赖机会,所以我必须解决它。我正在尝试优化算法(它基本上是使用Levenshtein距离寻找拼写和声音的相似性)但我担心使用文件系统而不是内存会使处理过慢。如果我知道内存将很快发布,有没有办法回应低内存警告?还有其他建议吗?

一些细节:

  1. 核心处理在NSOperation的后台完成
  2. 该算法是出于性能原因用C ++编写的,它使用C ++字符串和mallocs。
  3. 移植到Objective-C的相同算法慢了10倍,即使我没有调查原因
  4. 该应用程序没有泄漏内存。经过长时间处理后,所有内存都已正确释放
  5. 该应用仅限iPad
  6. 编辑:大部分存储空间是一个C ++向量,英文单词大约200K。我必须将这些单词与拼写和语音相似性的一些潜在候选人进行比较。对于每个候选人,我必须遍历整个单词列表并计算Levenshtein距离。使用在函数中静态分配的相似性矩阵来计算距离。我仍然很困惑为什么我开始使用大约2 MB的词汇表,并在处理过程中最终得到70多MB的实时字节。

1 个答案:

答案 0 :(得分:0)

  1. 如果占用太多内存,您无法绕过操作系统终止您的应用。当你得到低记忆警告并且希望不被击落时,你能做的最好的事情就是免费。请记住,在iOS中,所有应用程序共享相同的物理内存,并且没有交换,因此70MB很多。

  2. 如果你不确定你的应用为什么会占用这么多内存,那么可以尝试使用Allocations工具对其进行分析。