我想在内存不足的情况下很好地测试我的应用程序功能,但是很难测试。当应用程序在设备而非模拟器上运行时,如何在视图中引发内存不足警告,从而触发didReceiveMemoryWarning方法?或者在这些可能的条件下,我可以通过哪些方式测试我的应用?
我无法使用模拟器的原因是我的应用使用了Game Center,并且邀请在模拟器上无法使用。
Answers:
要在设备上进行测试,只需添加一些代码,这些代码会定期分配大内存而不释放内存(即有意泄漏)。您可以在单独的线程中执行此操作,也可以响应计时器,也可以使用最适合您测试和观察应用程序行为的机制。
如果您想轻松地重用此应用程序和/或对多个应用程序进行测试,则可能还选择创建一个单独的应用程序,该应用程序执行类似的操作并设计为在后台运行。
您可以调用private方法:
[[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
iOS模拟器的Simulate Memory Warning
菜单项可让您模拟内存警告。
如果有人出于某种原因尝试在Swift 4中执行此操作-这是如何分配1.2 GB内存的方法。
let d = Data.init(repeating: 100, count: 1200000000)
如果有人出于某种原因尝试在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;
}