Dans votre exemple, mapView1
est une variable d'instance (ivar), un morceau de la mémoire de stockage qui appartient à une instance de la classe définies en example.h
et example.m
. mapView
est le nom d'une propriété. Les propriétés sont les attributs d'un objet qui peut être lu ou fixé à l'aide de la notation par points: myObject.mapView
. Un bien ne pas avoir à être basé sur un ivar, mais la plupart des propriétés sont. L' @property
déclaration dit au monde qu'il existe une propriété appelée mapView
.
@synthesize mapView = mapView1;
Cette ligne indique au compilateur de créer un setter et getter pour mapView
, et qu'ils devraient utiliser les ivar appelés mapView1
. Sans l' = mapView1
partie, le compilateur suppose que la propriété et ivar ont le même nom. (Dans ce cas, ce serait de produire une erreur du compilateur, car il n'y a pas de ivar appelés mapView
.)
Le résultat de cette @synthesize
déclaration est similaire à si vous aviez ajouté ce code vous-même:
-(MKMapView *)mapView
{
return mapView1;
}
-(void)setMapView:(MKMapView *)newMapView
{
if (newMapView != mapView1)
{
[mapView1 release];
mapView1 = [newMapView retain];
}
}
Si vous ajoutez ce code à la classe vous-même, vous pouvez remplacer l' @synthesize
déclaration avec
@dynamic mapView;
La chose principale est d'avoir une très nette distinction conceptuelle entre ivars et les propriétés. Ils sont vraiment deux très différents concepts.