В вашем примере, mapView1
является экземпляр переменной (Ивар), часть памяти, в которой принадлежит к экземпляру класса, определенного в example.h
и example.m
. mapView
- это имя . Свойства - это атрибуты объекта, которые могут быть прочитаны или заданы с использованием точечной нотации: myObject.mapView
. В собственности нет есть, чтобы быть основанным на ivar, но большинство свойств. Объявление @property
просто говорит миру, что есть свойство, называемое mapView
.
@synthesize mapView = mapView1;
Эта строка указывает компилятору создать и присваивателя для mapView
, и что они должны использовать Ивар под названием mapView1
. Без части = mapView1
компилятор предположил бы, что свойство и ivar имеют одинаковое имя.(В данном случае, это будет производить ошибку компиляции, так как нет Ивара называется mapView
.)
В результате этого @synthesize
заявления аналогично, если вы добавили этот код самостоятельно:
-(MKMapView *)mapView
{
return mapView1;
}
-(void)setMapView:(MKMapView *)newMapView
{
if (newMapView != mapView1)
{
[mapView1 release];
mapView1 = [newMapView retain];
}
}
Если вы добавляете этот код в класс самостоятельно, вы можете заменить @synthesize
заявление с
@dynamic mapView;
Главное, чтобы иметь очень четкое концептуальное различие между иварами и свойствами. Это действительно две совершенно разные концепции.
Обновление: но с последним набором инструментов @synthesize теперь (почти) никогда не требуется. См. Ответ на [Другой вопрос переполнения стека] (http://stackoverflow.com/questions/17019798/about-naming-the-instance-variable-in-objective-c/17019883#17019883). –