Acceso a properties iOS Xcode 4

Cambié a Xcode 4 recientemente y realmente no entiendo esta nueva forma de escribir accesores. Por ejemplo, en la class de delegado de la aplicación que se genera automáticamente al crear un nuevo proyecto, el object de window no se declara en @interface sino de esta manera:

 @property (nonatomic, retain) IBOutlet UIWindow *window; 

Luego, en el file de implementación, tenemos la @synthesize window=_window; . Y en las funciones, tenemos self.window OR _window .

Por ejemplo:

 [self.window makeKeyAndVisible]; // in didFinishLaunchingWithOptions function [_window release]; // in dealloc function 

¿Puedes explicarme la diferencia, por qué no hay nada en la @interface , por qué hacemos @synthesize window=_window; en lugar de la @synthesize window; y ¿cuál es la diferencia entre self.window y _window , quiero decir cuándo debo llamar a uno más que al otro?

Estoy un poco perdido, y me siento como el nuevo código que hago intentando hacer lo mismo para no funcionar correctamente …

¡Gracias!

  1. "¿Por qué no hay nada en la @interface "

    El time de ejecución está sintetizando el ivar por ti.

  2. "¿Por qué hacemos @synthesize window=_window;

    Esto significa que la propiedad de la window usará un ivar llamado _window (por defecto el nombre ivar es el nombre de la propiedad)

  3. "¿Cuál es la diferencia entre self.window y _window ?"

    El primero usa el método de window "getter" (es decir, foo = [self window] ), y este último está accediendo directamente al ivar.

  4. "¿Por qué tengo que llamar a uno más que al otro?"

    Generalmente se considera inseguro utilizar methods de acceso en su método dealloc , lo que significa que se prefiere usar ivar.

Esto no tiene nada que ver con Xcode 4. Este es Objective-C 2.0 (que Xcode 4 usa de manera pnetworkingeterminada cuando se crean templates de proyecto).

Recomiendo leer el capítulo sobre properties en el lenguaje de progtwigción Objective-C , que debería hacer las cosas mucho más claras

Y hacer las cosas "el viejo path" seguirá funcionando. No tiene que cambiar todo de la noche a la mañana, simplemente elimine el código creado automáticamente si no le gusta, hasta que se sienta cómodo con la nueva syntax.

    Intereting Posts