开发者

iOS Development: How can I induce low memory warnings on device?

开发者 https://www.devze.com 2023-02-04 23:35 出处:网络
I\'d like to test my app functions well in low memory conditions, but it\'s difficult to test.How can I induce low memory warnings that trigger the didReceiveMemoryWarning method in my views when the

I'd like to test my app functions well in low memory conditions, but it's difficult to test. How can I induce low memory warnings that trigger the didReceiveMemoryWarning method in my views when the app is running on the device, not the simulator? Or what are some ways I can test my app under these开发者_如何学Go possible conditions?

The reason I can't use the simulator is my app uses Game Center and invites don't work on the simulator.


You can call the private method:

[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];

Just remember to use it on debug only, or else your app will get rejected.


The iOS Simulator's Simulate Memory Warning menu item allows you to simulate a memory warning.

iOS Development: How can I induce low memory warnings on device?


Using Instruments, use the menu item: Instrument -> Simulate Memory Warning.

To use Instruments on your app from Xcode, use the Product -> Profile menu item.


I've re-written Enzo Tran's answer in Swift:

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)


If someone, for whatever reason, tries to do this in Swift 4 - here is how to allocate 1.2 GB of ram.

let d = Data.init(repeating: 100, count: 1200000000)
  • This is helpful to trigger a warning alert in other apps


To test on a device, just add some code that periodically allocates large chunks of memory without freeing it (i.e. leak on purpose). You can do this in a separate thread, or in response to a timer, or using whatever mechanism that best allows you to test and observe the behavior of your application.

You might also choose to create a separate app that does something similar and is designed to run in the background, if you'd like to easily reuse this and/or test with multiple applications.


Converted @ChikabuZ to swift 3:

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)


Theres a menu command that will invoke it.

Hardware > Simulate Memory Warning from the simulator.


If someone, for whatever reason, tries to do this in Swift 5 - here is how to allocate 1.2 GB of RAM:

for _ in 0...1200 {
    var p: [UnsafeMutableRawPointer] = []
    var allocatedMB = 0
    p.append(malloc(1048576))
    memset(p[allocatedMB], 0, 1048576);
    allocatedMB += 1;
}


Swift 4:

UIApplication.shared.perform(Selector(("_performMemoryWarning")))

Can execute the above in response to an event/notification. For example:

    Button(action: {
        UIApplication.shared.perform(Selector(("_performMemoryWarning")))
    }, label: {
        Image(systemName: "memorychip")
    })
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号