Это немодифицированный код из шаблона 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
ссылается на ту же переменную экземпляра.