强制使iOS耗尽内存运行

4

我已经花了最近4个小时试图让我的iPad用尽内存,但是我做不到。

哦,这真是讽刺。

我想测试一些日志记录代码,我需要应用程序因为使用过多内存而被杀死,但无论我分配多少内存,都无法实现。我正在使用以下代码来压力测试:

if (tempArray == nil)
    tempArray = [NSMutableArray array];

NSData *data = [NSData dataWithBytes:malloc(10000000) length:10000000];

[tempArray addObject:data];

我每帧都运行这个程序(每秒30次)。最终,malloc返回NULL,但我从不看到像测试人员看到的内存警告。tempArray正在添加NSData对象。

我正在设备上运行此程序。有没有一种确保使您的应用程序使用太多内存并被杀死的方法?


你找到一种在前台和后台强制出现内存崩溃的方法了吗? - Mukul More
3个回答

2
尝试多次加载一张大图并且不释放它,就像你当前使用NSData一样。

好的,运行成功了。谢谢,我以为malloc基本上会做同样的事情,但看来不是这样。 - Roger Gilbrat
尝试过了,但没有成功。加载了一个带有加载图像的无限循环。不会耗尽内存。有没有办法也测试BOOM?@sch - Mukul More

2

在使用模拟器时,您可以模拟低内存情况,该选项可在iOS模拟器的“硬件”菜单下找到。


1
我不需要警告,我需要关闭应用程序,模拟器只会发出警告。 - Roger Gilbrat
如果您的应用程序达到了被终止的点,那么游戏结束了。意图是在收到这些警告时丢弃尽可能多的内容,从而避免应用程序被终止。 - Snips
1
实际上,我有一些日志记录代码,我在其中解析控制台日志,在崩溃后的下一次启动时进行编译。我只需要这个作为测试用例,以确保我捕获了内存不足的情况。Springboard 中的日志中包含有关应用程序被终止的原因的信息,这是我想要确保记录的数据。 - Roger Gilbrat
啊,那是一个聪明的技巧。 - Snips
我在模拟器中没有看到模拟低内存情况的选项,你能否提供更多信息?谢谢。 - Shaahul
@Shaahul 在你的 Mac 上选择模拟器应用本身(不是 Xcode),然后在“调试”菜单下,你会看到一个选项来模拟内存警告(Shift Option M 是键盘快捷键)。 - Snips

1
为了在Swift 5中增加内存压力,您可以创建大的实例。例如,每次调用此方法会浪费约500 MB:
static var wastedMemory: Data = Data()

static func waste() {
  let data = Data(repeating: 0, count: 500_000_000)
  wastedMemory.append(data)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接