0

对不起那种无用的帖子标题,但由于我不确定我在做什么,这是我能想到的最好的。

在我的头文件中,它看起来像这样

@interface RootViewController : UITableViewController {
NSMutableArray *eventsArray;    
}

@property (nonatomic, retain) NSMutableArray *eventsArray;

@end

这不是所有属性,但为了简单起见,我删除了所有属性。

我是按照苹果开发者的指南来做的。似乎该指南没有完全更新,因为它告诉我合成属性,我不应该再这样做了,对吧?

无论如何,为什么会这样?对我这个初学者来说,好像我两次声明了财产?还是我在第一排做其他事情?

4

2 回答 2

4

由于历史原因,使用较旧的编译器是这样的。

你现在可以这样做:

@interface RootViewController : UITableViewController

@property (nonatomic, retain) NSMutableArray *eventsArray;

@end

你有它的方式,你声明一个实例属性,然后你说你想自动生成getter和setter。

现在,你可以说你有一个属性,编译器会在编译时自动生成实例属性。它消除了明显的冗余。

于 2013-02-28T12:59:00.263 回答
2

对我这个初学者来说,好像我两次声明了财产?还是我在第一排做其他事情?

属性和支持它的实例变量(如果有的话)是两个不同的东西。属性实际上只是类提供某些访问器方法的承诺。因此,您必须分别声明属性和 ivar 的事实并不奇怪。然而,事实上,大多数属性都由具有相关名称的 ivar 支持,并且分别编写和维护这两个属性是一件苦差事。因此,Apple 在编译器中添加了 ivar 综合,以便编译器为任何不存在 ivar 的综合属性生成 ivar。此外,因为综合访问器是迄今为止最常见的,并且编译器将使用您提供的任何访问器,即使属性标记为@synthesize,这已成为默认值,因此您不再需要编译器指令。

于 2013-02-28T13:11:23.450 回答