Este es el código sin modificar de la plantilla de Apple iPhone 'Utilidad de Aplicación':Objective-C - Cuándo utilizar 'auto'
- (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];
}
Cuando mainViewController
se asigna a aController
, se especifica la palabra clave self
:
self.mainViewController = aController;
sin embargo, cuando se establece el marco de la mainViewController
's, no se requiere la palabra clave self
:
mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
Si quito la palabra clave self
desde el primer ejemplo, el programa se bloquea con el mensaje:
objc[1296]: FREED(id): message view sent to freed object=0x3b122d0
Si añado la palabra clave self
con el segundo ejemplo, el programa funciona muy bien.
¿Alguien puede explicar por qué self
es necesario en el primer caso pero no el segundo? Supongo que en ambos casos mainViewController
se refiere a la misma variable de instancia.
Lea las respuestas a esta pregunta: http://stackoverflow.com/questions/2302891/self-instance-var-performance-hit – Felixyz