Это немодифицированный код из шаблона Apple Utility Aplication:
- (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];
}
Когда mainViewController назначается aController, указано ключевое слово self:
self.mainViewController = aController;
Однако, когда установлен кадр mainViewController, ключевое слово self не требуется:
mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
Если я удалю ключевое слово self из первого примера, программа выйдет из строя с сообщением:
objc[1296]: FREED(id): message view sent to freed object=0x3b122d0
Если я добавлю ключевое слово self ко второму примеру, программа будет работать нормально.
Может ли кто-нибудь объяснить, почему self требуется в первом случае, но не во втором? Я предполагаю, что в обоих случаях mainViewController ссылается на ту же переменную экземпляра.