So yeah, I'm a Java guy in this crazy iPhone world. When it comes to memory management I stiill don't have a very good idea of what I'm doing.
I have an app that uses a navigation controller, and when it's time to go on to the next view I have code that looks like this:
UIViewController *myController = [[MyViewController alloc] initWithNibName:@"MyView"
bundle:[NSBundle mainBundle];
[[self navigationController] pushViewController:myController animated:YES];
Now according to Apple's fundamental rule on memory management
You take ownership of an object if you create it using a method whose name begins with “alloc” or “new” or contains “copy” (for example,
alloc,newObject, ormutableCopy), or if you send it aretainmessage. You are responsible for relinquishing ownership of objects you own usingreleaseorautorelease. Any other time you receive an object, you must not release it.
To me that means that I should be releasing myController, or giving it an autorelease message. But, whenever I try doing that my application winds up crashing as I push and pop views off of the stack.
This didn't smell right to me, but in running Instruments it claims that I don't have any memory leaks.
So I my question is
The problem is (most likely) you're releasing your viewController before the Navigation Controller has a chance to claim ownership. There are two ways around this:
-release your controller after pushing it to the Nav Controller-autorelease your controller before pushing it. If you do this, the active NSAutoreleasePool (which you don't need to worry about) will take care of releasing your controller at a later time.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With