BTW, guys, let a programmer chime in.
I've played a LOT with memory management in iOS apps. Note that the following applies to all iOS versions between iOS4 and 6 but not necessarily to7 (haven;t tested this under iOS7 yet)
1, generally, when your app is started and there are other apps the user has started previously, you (as a programmer) don't have as much memory as you can have. This means system calls to get the free memory generally return much lower values than you can otherwise have (on a 256Mbyte iPhone 3gs running on 4.x, about 150 Mbyte, for example. Haven't measured this value on newer OS'es; I assume it's somewhat lower).
2, when and only when you start allocating memory (via malloc() or anything similar), does the system start freeing memory.
This is why apps requiring as much free mem as possible require the user to run "warming up" stuff - for example, SnappyCam, which only gets granted the maximum free mem possible after you actively shoot some 3-4 photo burst series. This increasingly frees up memory.
You can also do this from your app as well by continuously allocating memory (calling malloc()) in, depending on how close you are to the "danger zone" (you shouldn't allocate 10 Mbyte when you're very close to the threshold - then, you need to switch back to 1-2 Mbyte allocations) 2-5-10Mbyte until you get a memory warning. This can take some time - for example, on a 3gs to free up the entire 150Mbyte of available RAM takes some 5 seconds.
Unfortunately, there aren't system calls like "now, kill all other tasks and free up as much memory as possible". All you can do is gradually increase the free RAM you have access to for your own app (to, let's stick with SnappyCam, use as a buffer to store intermediate images you shoot to avoid having to write them back to the storage, which would essentially decrease the shooting framerate to 1/5th of the original). This has always been a major problem with iOS programming.
All in all, all this is pretty cumbersome for both the programmer and the user. The former, upon start, can't really know how much memory he can have for allocation; the latter needs to manually run "warming up" initial runs with SnappyCam, for example.)
Feel free to ask me for more info and I can re-run my tests on iOS7 / even publish an updated article on my findings.