This is unmodified code from Apple's iPhone 'Utility Aplication' template:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
self.mainViewController = aController;
[aController release];
mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
[window addSubview:[mainViewController view]];
[window makeKeyAndVisible];
}
When mainViewController
is assigned to aController
, the self
keyword is specified:
self.mainViewController = aController;
However, when the mainViewController
's frame is set, the self
keyword is not required:
mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
If I remove the self
keyword from the first example, the program crashes with the message:
objc[1296]: FREED(id): message view sent to freed object=0x3b122d0
If I add the self
keyword to the second example, the program runs fine.
Can anyone explain why self
is needed in the first case but not the second? I'm assuming that in both cases mainViewController
is referring to the same instance variable.