我目前正在使用最新版本的Xcode(v5.0.2),我的应用程序的部署目标是iOS 7.0。
我的问题是,无论在哪个班级,我都可以在标题中设置属性
ex:@property (strong, nonatomic) NSString *firstName;
在实现文件中,我可以很好地合成它
ex:@synthesize firstName;
我的问题是我无法在代码中使用_firstName
。我在其他项目中使用了自动ivars就好了(属性名称以下划线开头)。
Xcode抱怨并告诉我将其更改为没有下划线的属性名称。我不明白为什么这个项目不会自动为我创建带有下划线的ivars。我知道在旧版本的Objective-C中,你必须自己做这件事,但不适用于iOS 7。
谢谢!
答案 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。