Nel tuo esempio, mapView1
è un un'istanza variabile (ivar), un pezzo di memoria che appartiene a un'istanza della classe definita in example.h
e example.m
. mapView
è il nome di una proprietà . Le proprietà sono attributi di un oggetto che può essere letto o impostato utilizzando la notazione a punti: myObject.mapView
. Una proprietà non ha basata su un ivar, ma la maggior parte delle proprietà lo sono. La dichiarazione @property
dice semplicemente al mondo che esiste una proprietà chiamata mapView
.
@synthesize mapView = mapView1;
Questa linea dice al compilatore di creare un setter e getter per mapView
, e che dovrebbero utilizzare l'Ivar chiamato mapView1
. Senza la parte = mapView1
, il compilatore presuppone che la proprietà e ivar abbiano lo stesso nome.(In questo caso, che produrrebbe un errore di compilazione, dal momento che non v'è alcuna Ivar chiamato mapView
.)
Il risultato di questo @synthesize
affermazione è simile a se avessi aggiunto questo codice da soli:
-(MKMapView *)mapView
{
return mapView1;
}
-(void)setMapView:(MKMapView *)newMapView
{
if (newMapView != mapView1)
{
[mapView1 release];
mapView1 = [newMapView retain];
}
}
Se fate aggiungere che codice alla classe da soli, è possibile sostituire l'istruzione @synthesize
con
@dynamic mapView;
la cosa principale è quello di avere una molto chiara concettuale distinzione tra ivar e proprietà. Sono davvero due concetti molto diversi.
Aggiornamento: ma con l'ultimo set di strumenti @synthesize è ora (quasi) mai necessario. Vedi la risposta a [Other Overflow Question Question] (http://stackoverflow.com/questions/17019798/about-naming-the-instance-variable-in-objective-c/17019883#17019883). –