【发布时间】:2011-06-10 16:03:32
【问题描述】:
我想在内存不足的情况下很好地测试我的应用功能,但测试起来很困难。当应用程序在设备而不是模拟器上运行时,如何在我的视图中引发触发 didReceiveMemoryWarning 方法的内存不足警告?或者在这些可能的条件下,我可以通过哪些方式测试我的应用?
我无法使用模拟器的原因是我的应用使用了 Game Center,并且邀请无法在模拟器上运行。
【问题讨论】:
我想在内存不足的情况下很好地测试我的应用功能,但测试起来很困难。当应用程序在设备而不是模拟器上运行时,如何在我的视图中引发触发 didReceiveMemoryWarning 方法的内存不足警告?或者在这些可能的条件下,我可以通过哪些方式测试我的应用?
我无法使用模拟器的原因是我的应用使用了 Game Center,并且邀请无法在模拟器上运行。
【问题讨论】:
如果有人出于某种原因尝试在 Swift 4 中执行此操作 - 以下是如何分配 1.2 GB 内存。
let d = Data.init(repeating: 100, count: 1200000000)
【讨论】:
斯威夫特 4:
UIApplication.shared.perform(Selector(("_performMemoryWarning")))
可以响应事件/通知执行上述操作。
【讨论】:
如果有人出于某种原因尝试在 Swift 3 中执行此操作 - 以下是如何分配 1.2 GB 的内存。
for i in 0...1200 {
var p: [UnsafeMutableRawPointer] = []
var allocatedMB = 0
p.append(malloc(1048576))
memset(p[allocatedMB], 0, 1048576);
allocatedMB += 1;
}
【讨论】:
将@ChikabuZ 转换为 swift 3:
UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
【讨论】:
我已经用 Swift 重写了Enzo Tran's answer:
UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
【讨论】:
使用仪器,使用菜单项:仪器 -> 模拟内存警告。
要从 Xcode 在您的应用上使用 Instruments,请使用 Product -> Profile 菜单项。
【讨论】:
你可以调用私有方法:
[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
请记住仅在调试时使用它,否则您的应用将被拒绝。
【讨论】:
po [[UIApplication sharedApplication]performSelector:@selector(_performMemoryWarning)]
expr (void)[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
expr (void)[[UIApplication sharedApplication] _performMemoryWarning]
expr UIApplication.sharedApplication().performSelector("_performMemoryWarning") 而不是使用通常的 #selector
要在设备上进行测试,只需添加一些定期分配大块内存而不释放它的代码(即故意泄漏)。您可以在单独的线程中执行此操作,或响应计时器,或使用最适合您测试和观察应用程序行为的任何机制。
如果您想轻松地重复使用它和/或使用多个应用程序进行测试,您也可以选择创建一个单独的应用程序来执行类似的操作并设计为在后台运行。
【讨论】:
有一个菜单命令会调用它。
Hardware > Simulate Memory Warning 来自模拟器。
【讨论】: