Video: iOS - Xcode 4.6.1 en Español - Crear nueva UIViewController y asignarle una clase - 5/x 2025
Cuando las propiedades se desarrollaron por primera vez para la programación de aplicaciones iOS, se consideraron como una forma de evite el tedio de los accesadores de escritura, por ejemplo, propiedades basadas en variables. La gente solía pensar en las propiedades como una forma de acceder a las variables de instancia.
De hecho, las variables de instancia no deben equipararse a las propiedades, y las variables de instancia más importantes no deben hacerse públicas. (Hacerlo viola el principio de encapsulación orientado a objetos, pero esa es una conversación para otro tiempo). De hecho, el nuevo enfoque de Apple es poner declaraciones de variables de instancia en el archivo de implementación de la clase.
Xcode 4. 2 surgió, los programadores declararon variables de instancia en el archivo de encabezado en la declaración de clase @interface. En los viejos tiempos, habría agregado el siguiente código en negrita al TestDriveController. h archivo:
@ interface TestDriveController: UIViewController { AVAudioPlayer * backgroundAudioPlayer; SystemSoundID burnRubberSoundID; BOOL touchInCar; }
Este enfoque hacía que las variables de instancia (ivars) fueran visibles para todos y para todos, y estaba en desacuerdo con el principio de encapsulación (incluso si no se podía acceder a las variables).
Comenzando con Xcode 4. 2, ahora puede ocultar las variables de instancia al declararlas en el archivo de implementación de una de dos maneras. La primera es como una extensión de clase , que se crea al agregar una segunda sección de interfaz en el archivo de implementación seguido de abrir y cerrar entre paréntesis:
@ interface TestDriveController () {AVAudioPlayer * backgroundAudioPlayer; SystemSoundID burnRubberSoundID; BOOL touchInCar;} -d
La segunda forma es declarando la variable de instancia en el bloque @implementation de la clase:
@implementation TestDriveController AVAudioPlayer * backgroundAudioPlayer; SystemSoundID burnRubberSoundID; BOOL touchInCar;
Una extensión de clase es una variación de una categoría Objective-C.
El enfoque que usa es su elección; el uso de la extensión de clase hace que las variables sean más fáciles de distinguir.
También puede usar extensiones de clase para tener un conjunto de métodos declarado públicamente y luego declarar métodos adicionales para su uso exclusivo por la clase:
@ interface TestDriveController () {AVAudioPlayer * backgroundAudioPlayer; SystemSoundID burnRubberSoundID; BOOL touchInCar;} - (void) privateMethod; -d
Estos métodos no son realmente privados, pero no son visibles en el archivo de encabezado. Son "API privadas"."
