iphone - @synthesize 到底是做什么的?

我看过下面这段代码:

//example.h
MKMapView * mapView1;
@property (nonatomic, retain) MKMapView * mapView;

//example.m
@synthesize mapView = mapView1

mapViewmapView1是什么关系? 它是否为 mapView1 创建了 setget 方法?

最佳答案

在您的示例中,mapView1 是一个 instance 变量 (ivar),它是属于 example 中定义的类的实例的一段内存存储。 hexample.mmapView属性 的名称。属性是可以使用点表示法读取或设置的对象的属性: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/

相关文章:

ios - 调整 UITableView 的大小以适应内容

ios - 为什么 NSUserDefaults 无法在 iOS 中保存 NSMutableDict

objective-c - 如何将字符串转换为 double ,反之亦然?

objective-c - Objective-C 中的 NSString 标记化

ios - iOS 上 Objective-C 中的类型

ios - 当我在 UITextField 中按返回键时如何隐藏键盘?

objective-c - Xcode 构建失败 "Undefined symbols for ar

ios - 在 Objective-C 中从 NSMutableArray 中删除重复值的最佳方法是

ios - 以编程方式滚动 UIScrollView

objective-c - 声明一个 block 方法参数而不使用 typedef