objective-c成员var和属性语句用法

时间:2012-08-25 17:56:23

标签: properties synthesize

最近我开始学习Objective-C,我对成员var和属性感到困惑。我想知道以下三个代码块之间的区别:

1

@interface Application 
{ 
    UserInfo* userInfo; 

    ApplicationInfo*applicationInfo;
}

@property (retain) UserInfo*userInfo; // @synthesize userInfo; 

@property (retain) ApplicationInfo* applicationInfo ; // @synthesize applicationInfo;

@end 

2

@interface Application 

{ 
}

@property (retain) UserInfo*userInfo; // @synthesize userInfo; 

@property (retain) ApplicationInfo* applicationInfo ; // @synthesize applicationInfo; 

@end 

3

 @interface Application 
{ 
    UserInfo* userInfo; 

    ApplicationInfo*applicationInfo;
} 

@end

非常感谢!

1 个答案:

答案 0 :(得分:0)

1:这声明了具有附加声明属性的实例变量。合成属性时,例如属性foo,会自动生成foosetFoo方法,这些方法引用实例变量(由于名称相同),这些是当您使用点表示法(例如someInstance.foo = bar)来访问它们时调用。因为您将属性定义为retain,所以当使用setter或点表示法将对象分配给属性时,将释放实例变量指向的现有对象,并将新对象分配给实例变量并保留。

2:与1.完全相同。暗示了实例变量。

3:实例变量存在,但属性不存在,因此您将无法通过点表示法访问它们,也不会合成getter / setter方法。

我强烈建议您阅读有关此内容的官方文档,这一点非常清楚,并以相当简单的方式完成。