我看过下面这段代码:
//example.h
MKMapView * mapView1;
@property (nonatomic, retain) MKMapView * mapView;
//example.m
@synthesize mapView = mapView1
mapView
和mapView1
是什么关系?
它是否为 mapView1
创建了 set
和 get
方法?
最佳答案
在您的示例中,mapView1
是一个 instance 变量 (ivar),它是属于 example 中定义的类的实例的一段内存存储。 h
和 example.m
。 mapView
是属性 的名称。属性是可以使用点表示法读取或设置的对象的属性:myObject.mapView
。属性必须基于 ivar,但大多数属性都是。 @property
声明只是告诉全世界有一个名为 mapView
的属性。
@synthesize mapView = mapView1;
这一行告诉编译器为 mapView
创建一个 setter 和 getter,并且它们应该使用名为 mapView1
的 ivar。如果没有 = mapView1
部分,编译器会假定属性和 ivar 具有相同的名称。 (在这种情况下,这会产生编译器错误,因为没有名为 mapView
的 ivar。)
此 @synthesize
语句的结果类似于您自己添加此代码:
-(MKMapView *)mapView
{
return mapView1;
}
-(void)setMapView:(MKMapView *)newMapView
{
if (newMapView != mapView1)
{
[mapView1 release];
mapView1 = [newMapView retain];
}
}
如果您确实将该代码添加到类中,您可以将 @synthesize
语句替换为
@dynamic mapView;
主要是在 ivars 和属性之间有一个非常清晰的概念区别。它们实际上是两个截然不同的概念。
https://stackoverflow.com/questions/3266467/