iOS 7 Dev - @synthesize不会自动创建ivars

时间:2014-02-15 08:00:15

标签: ios objective-c ios7 synthesize

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

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

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

在实现文件中,我可以很好地合成它

ex:@synthesize firstName;

我的问题是我无法在代码中使用_firstName。我在其他项目中使用了自动ivars就好了(属性名称以下划线开头)。

Xcode抱怨并告诉我将其更改为没有下划线的属性名称。我不明白为什么这个项目不会自动为我创建带有下划线的ivars。我知道在旧版本的Objective-C中,你必须自己做这件事,但不适用于iOS 7。

谢谢!

4 个答案:

答案 0 :(得分:5)

你可以完全跳过@synthesize,它会创建下划线的ivars。如果在没有指定变量名称(@synthesize)的情况下执行@synthesize firstName = _firstName;,则会创建没有下划线的变量。

答案 1 :(得分:3)

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

在这一行中

@synthsize firstName = otherName;

其中firstName是您的属性名称,而otherName是您的ivar名称

在您的行

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

所以属性和ivar是相同的firstName

如果您没有写任何@synthesize

然后编译器将

@synthesize firstName = _firstName;

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

答案 2 :(得分:2)

略过@synthesize,你的情况会好起来的。由于您使用的是新的XCode版本,因此在这种情况下您并不需要这样做。请查看similar question(和this one)。

答案 3 :(得分:2)

不要使用@synthesize(除非它是NSManagedObject子类)。但是,你很少应该使用直接的ivar。在init方法之外,你应该总是使用self.firstName。