Background: I’m (jumping on the bandwagon and) starting learning about iPhone/iPad development and Objective-C. I have a great background in web development and most of my programming is done in javascript (no libraries), Ruby, and PHP.
Question: I’m learning about allocating and releasing memory in Objective-C, and I see it as quite a tricky task to layer on top of actually getting the farking thing to run. I’m trying to get a sense of applications that are out there and what will happen with a poorly memory-managed program.
A) Are apps usually released with no memory leaks? Is this a feasible goal, or do people more realistically just excise the worst offenders and that’s ok?
B) If I make a NSString for a title of a view, let’s say, and forget to deallocate it it, does this really only become a problem if I recreate that string repeatedly? I imagine what I’m doing is creating an overhead of the memory needed to store that string, so it’s probably quite piddling (a few bytes?) However if I have a rapidly looping cycle in a game that ‘leaks’ an int every cycle or something, that would overflow the app quite quickly. Are these assumptions correct?
Sorry if this isn’t up the community-wiki alley, I’m just trying to get a handle on how to think about memory and how careful I’ll need to be. Any anecdotes or App Store-submitted app experiences would be awesome to hear as well.
Follow the patterns, and memory management is rarely the biggest roadblock in Cocoa.
However, I’m going to be a contrarian here: your sense is mostly correct. Leaking one NSString used as a label somewhere is not going to hurt anybody. Most apps of any complexity have multiple singletons around in the world holding state for the entire life of the app, and that’s OK too (well, better, because it’s explicit). So no, accidentally leaking a string once isn’t going to kill you. Leaking big things (images, textures, file content data) will hurt you, though– Apple doesn’t guarantee any minimum or deterministic amount of memory for your process on the iPhone OS platform, so one or two of those leaks might result in users seeing frequent “crashes” in the field that you don’t always see during development.
Be vigilant, use the patterns, and use the tools, and you’ll be OK.