I’ve searched for this on Apple’s site and can only seem to find documentation using Storyboards or Navigation Controllers, neither of which I’m using. It’s an incredibly straightforward question about memory management.
I created a completely blank application. In my AppDelegate’s didFinishLaunchingWithOptions function I’m creating an instance of a View Controller which I’ve built. My design (which itself could be a problem) is to have a 1:1 relationship between View Controllers and Views.
So the main menu of my application, which is a launching pad for everything is in MenuViewController.h/m.
In .h:
MenuViewController *m;
In .m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
m = (MenuViewController *)[[MenuViewController alloc] init];
m.window = self.window;
[m doStuff]; // handful of functions, not actually called this
//[m release]; // doesn't make sense to me
return YES;
}
This is where I’m confused. I want this to exist for basically the entirety of the application life cycle. But I’m also under the impression that you should (in the scope of the current function) release anything you allocate. If you need it beyond that, you should retain it elsewhere first. Is this not true?
My fundamental question is…where should I be releasing this View Controller? Is there anything else I’ve said that seems out of whack?
The initialization is wrong. You don’t assign a window to controller, you assign a controller to window: