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.