属性和实例变量声明

时间:2010-09-17 15:26:59

标签: objective-c

我注意到你可以用这种方式'双重声明'变量:

@interface A {
    NSString *instanceVariable;
}
@property (nonatomic, retain) NSString *instanceVariable;
@end

这与以下情况具有相同的效果:

@interface A {
}
@property (nonatomic, retain) NSString *instanceVariable;
@end

为什么编译器在这种情况下不抱怨?

1 个答案:

答案 0 :(得分:7)

因为两种方式都有效。

通过声明属性来声明ivar是一种新的语言功能,可以从objc 2.0开始

在“Objective-c编程语言”的"Run-time differences"部分中提到:

  

让@synthesize在遗产中工作   运行时,你必须提供一个   具有相同名称的实例变量   和兼容的财产类型或   指定另一个现有实例   @synthesize语句中的变量。   使用现代运行时,如果不这样做   提供一个实例变量,   编译器为你添加一个。