2

我目前正在使用最新版本的 Xcode (v5.0.2),我的应用程序的部署目标是 iOS 7.0。

我的问题是,无论在哪个班级,我都可以在标题中设置一个属性

前任:@property (strong, nonatomic) NSString *firstName;

在实现文件中,我可以合成它就好了

前任:@synthesize firstName;

我的问题是我不能_firstName在代码中使用。我在其他项目中使用了自动 ivars 就好了(属性名称前有下划线)。

Xcode 抱怨并告诉我将其更改为不带下划线的属性名称。我不明白为什么这个项目没有自动为我创建带下划线的 ivars。我知道在旧版本的 Objective-C 中,您必须自己执行此操作,但对于 iOS 7 则不需要。

谢谢!

4

4 回答 4

5

您可以完全跳过@synthesize它,它会创建带下划线的 ivars。如果您@synthesize没有指定变量名 ( @synthesize firstName = _firstName;),它将创建不带下划线的变量。

于 2014-02-15T08:02:18.657 回答
3

@synthesize为您的财产创建一个 ivar

在这一行

@synthsize firstName = otherName;

firstName您的财产名称在哪里,而otherName您的 ivar 名称在哪里

在你的行

@synthesize firstName;===@synthesize firstName = firstName;

所以属性和 ivar 是相同的,即firstName

如果你什么都没写@synthesize

然后编译器将把

@synthesize firstName = _firstName;

其中firstName是属性名称,_firstName是 ivar 名称

于 2014-02-15T08:13:02.093 回答
2

跳过,@synthesize在你的情况下会很好。由于您使用的是新的 XCode 版本,因此在这种情况下您并不真正需要它。请看一下类似的问题(和这个问题)。

于 2014-02-15T08:04:49.917 回答
2

不要费心使用@synthesize(除非它是一个 NSManagedObject 子类)。但是,无论如何您都很少使用直接 ivar。在您的 init 方法之外,您应该始终使用 self.firstName。

于 2014-02-15T08:08:37.170 回答