Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How much memory can one iOS app use?

... when it's in the foreground.

For the original iPad, with 256MB RAM, I found that my app could use up to 100-140MB before it got killed.

What's the situation nowadays? I could do go buy a bunch of iDevices and do a test myself, but I wanted to check: Has anyone done a test?

I understand that this does not have a precise answer, and I'm looking for a range, like: "Apps are killed when they use 300-350MB on a 512MB device. You can safely use up to 300MB."

Specifically:

  1. On a device with 512MB memory, how much can one app use?

  2. On a device with 1GB memory, how can can one app use?

  3. Is there a difference between the above? Is each individual app limited to a fixed amount of memory in the interest of keeping a few apps in the background, or can the foreground app kick out ALL background apps from memory, and take the whole 1GB (or 512MB) to itself (and the OS, of course)?

  4. Does it matter whether the device is an iPad or an iPhone? If I get my app working on an iPad with 512MB memory, does it mean that it will also work on an iPhone with 512MB memory, and vice-versa? I know that UIViews, and their Core Animation backing stores, will take more memory on the iPad because of the larger screen size, but other than that, is the memory situation the same between an iPhone and an iPad with the same memory?

I'm referring to the total memory used by the process -- heap, stack, static data, code, Core Animation backing stores, etc.

If you're inclined to say that it depends on the OS version, you can assume we're talking about iOS 7.

I know that using too much memory means that when my app goes into the background, iOS will terminate it quicker. I'm fine with this tradeoff for now.

like image 565
Kartick Vaddadi Avatar asked Jan 12 '14 04:01

Kartick Vaddadi


People also ask

How much memory is an app using?

Tap Developer options and then tap Memory. In the resulting screen (Figure B), you'll see a list of the average memory used by the device in the past three hours (you can adjust the time frame, by tapping the time drop-down at the top). The Memory usage window in Android 12.

How big should an iOS app be?

And the average iOS app file size is 34.3MB. But these figures include mobile apps that have a release date in the distant past. Indeed, if we look at mobile apps released in the past month, we see an average Android app file size of 14.6MB. And an average of 37.9MB for iOS mobile apps.


1 Answers

I wrote a test app that measures how much memory an app can allocate before it's killed. Here are the numbers:

  • iPhone 5s (iOS 10, debug mode, 1GB memory): 600MB can be allocated
  • iPad Air 2 (iOS 11.4, 2GB memory): 1.3GB can be allocated
  • iPhone X (iOS 11.4, 3GB memory): 1.2GB can be allocated
  • iPhone 7 Plus (iOS 12.1, 3GB memory): 1.8GB can be allocated
  • iPad 13-inch (iOS 11.4, 4GB memory): 3GB can be allocated

It's interesting that I never got a memory warning.

Here's the code if you want to run the test yourself:

import UIKit  let sizeInMb = 100  class Wrapper {   var array = [UInt8](repeating: 0, count: sizeInMb * 1048576)  // 100 MB }  @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {     var window: UIWindow?      func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {         window = UIWindow(frame: UIScreen.main.bounds)          var i = 0          sleep(5)  // So that you can see how much memory it consumes before any allocations.          while true {             let w = Wrapper()             Unmanaged<Wrapper>.passRetained(w)             i += 1             print("\(i * sizeInMb) MB allocated")             sleep(1)  // Give the OS a chance to kill other processes.         }          return true     }      func applicationDidReceiveMemoryWarning(_ application: UIApplication) {         print("Memory warning!")     } } 

This does not work on the simulator. Anything regarding performance should be tested on device.

like image 196
Kartick Vaddadi Avatar answered Sep 24 '22 15:09

Kartick Vaddadi