Dan Rosenstark
Dan Rosenstark

Reputation: 69757

Simple Obj-C Memory Management Question

This is from some sample code from a book

// On launch, create a basic window
- (void)applicationDidFinishLaunching:(UIApplication *)application { 
 UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:[[HelloController alloc] init]];
 [window addSubview:nav.view];
 [window makeKeyAndVisible];
}

But a release is never called for window nor for nav.

  1. Release should be called since alloc was called, right?
  2. If #1 is right, then I would need to store a reference to each of these in an instance variable in order to release them in the dealloc?

Perhaps I'm wrong all around...

Upvotes: 1

Views: 71

Answers (1)

Williham Totland
Williham Totland

Reputation: 29009

Yes, normally.

However; UIWindow is normally not released, nor is the root navigation controller, as, well, what's the point. They last for the duration of your application.

Also, get a newer book; we use Interface Builder for this stuff now.

Upvotes: 4

Related Questions