最近我开始学习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
非常感谢!
答案 0 :(得分:0)
1:这声明了具有附加声明属性的实例变量。合成属性时,例如属性foo
,会自动生成foo
和setFoo
方法,这些方法引用实例变量(由于名称相同),这些是当您使用点表示法(例如someInstance.foo = bar
)来访问它们时调用。因为您将属性定义为retain
,所以当使用setter或点表示法将对象分配给属性时,将释放实例变量指向的现有对象,并将新对象分配给实例变量并保留。
2:与1.完全相同。暗示了实例变量。
3:实例变量存在,但属性不存在,因此您将无法通过点表示法访问它们,也不会合成getter / setter方法。
我强烈建议您阅读有关此内容的官方文档,这一点非常清楚,并以相当简单的方式完成。