visual una studio sirve que para objetos objeto net metodos llamar lista instanciar create crear como clase agregar objective-c

objective-c - una - metodos de un objeto en visual basic



Sintetizando una propiedad sin variables de instancia (3)

Pensé que entendía @property y @synthesize, pero hice algunos experimentos y no puedo entender por qué funciona el código siguiente (lo que pensé que estaba roto).

Como puede ver, no hay ninguna variable de instancia que corresponda a la propiedad de nombre. ¿Objective-C crea de alguna manera una variable de instancia si no encuentra una variable de instancia con el mismo nombre y tipo?

Encabezamiento:

#import <Foundation/Foundation.h> @interface AddressCard : NSObject { } @property (copy, nonatomic) NSString *name; -(void) print; @end

Implementación:

#import "AddressCard.h" @implementation AddressCard @synthesize name; -(void) print { NSLog(@"Name=%@", self.name); } -(void) dealloc { [name release]; [super dealloc]; } @end

Prueba:

int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; AddressCard *ac = [[AddressCard alloc] init]; ac.name = @"Brandon"; [ac print]; [ac release]; [pool drain]; return 0; }


La respuesta rápida es si". En Objective-C 2.0, las propiedades sintetizadas crearán automáticamente los ivars correspondientes según sea necesario.

La documentación de Apple tiene algunos detalles más.

Importante: como lo señaló Tommy ( nota: esto proviene de los documentos heredados; consulte la información más reciente ):

En Objective-C 2.0 en cualquiera de los tiempos de ejecución modernos (es decir, Intel 64bit y ARM), las propiedades se pueden agregar a las clases ''dinámicamente'' (es decir, en tiempo de ejecución pero solo antes de la creación de cualquier instancia, no particularmente dinámica en comparación con el resto) del tiempo de ejecución). Sin embargo, esto no se puede hacer en ninguno de los dos tiempos de ejecución anteriores (es decir, Intel 32bit y PowerPC). Por lo tanto, no es realmente algo que desee utilizar en el software de envío para Mac o durante el desarrollo para iOS (ya que el simulador es una aplicación Intel de 32 bits y no puede crear variables de instancia en tiempo de ejecución)


Puede omitir la declaración de variable de instancia solo para la arquitectura de 64 bits


Quiero agregar que aunque la variable de instancia se crea automáticamente, se denomina igual que la propiedad. Al hacer esto, puede obtener errores en su código más adelante. Por lo tanto, además de evitar el caso de no generar automáticamente en algunas arquitecturas, siempre debe crear la variable de instancia para que no obtenga nada inesperado más adelante.