0

最近开始学习Objective-C,对成员变量和属性感到困惑。我想知道以下三个代码块有什么区别:

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

非常感谢你!

4

1 回答 1

0

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

2:同1。实例变量是隐含的。

3:实例变量存在,但属性不存在,因此您将无法通过点符号访问它们,并且没有综合getter/setter方法。

我强烈建议您阅读有关此的官方文档,它非常清楚,并且以一种相当简单的方式进行了说明。

于 2012-08-26T02:54:43.093 回答