@property和@synthesize如何运作?

时间:2011-10-26 07:45:08

标签: iphone objective-c ios

  

可能重复:
  Property Declaration and Automatic Backing Storage Allocation

我知道@property和@synthesize指令的基本功能,但最近我找到了一个示例代码:enter image description here

TTDownloader中没有任何类成员变量,但它完美无缺。

TTDownloader *dl = [[TTDownloader alloc] init];
NSLog(@"%d %@", dl.aaa, dl.bbb); // result: 0 (null)
dl.aaa = 101;
dl.bbb = [NSNumber numberWithInt:201];
NSLog(@"%d %@", dl.aaa, dl.bbb); // result: 101 201

我的问题如下:

  1. aaa和bbb在哪里?我甚至没有地方可以存放这些数据。 TTDownloader为空(除了从NSObject派生的一些变量和函数)。

  2. 我是否遗漏了Objective C的一些强大功能?它们是在Obj-C编程指南中描述的,我只是阅读了它的一部分。

  3. 提前致谢。

1 个答案:

答案 0 :(得分:1)

在除32位OS X之外的所有平台上的现代运行时,当您合成属性时,如果尚未声明实例变量,则会自动创建它。所以

  1. aaa和bbb是属性,即每个都是一对合成的存取方法,分别使用实例变量_aaa和_bbb。

  2. 是的,见上文。