对于那种无用的帖子标题感到抱歉,但由于我不确定我在做什么,这是我能想到的最好的。
在我的头文件中,它看起来像这样
@interface RootViewController : UITableViewController {
NSMutableArray *eventsArray;
}
@property (nonatomic, retain) NSMutableArray *eventsArray;
@end
这不是所有的属性,但为了简单起见我删除了除了一个属性。
我是按照苹果开发者的指南来做到这一点的。似乎指南没有完全更新,因为它告诉我合成属性,我不应该再对了吗?
无论如何,为什么会这样?对我来说,这是一个初学者,好像我两次声明了这个属性?或者我在那里的第一行做其他事情?
答案 0 :(得分:4)
由于历史原因,使用较旧的编译器就是这样。
你现在可以这样做:
@interface RootViewController : UITableViewController
@property (nonatomic, retain) NSMutableArray *eventsArray;
@end
你拥有它的方式,你声明了一个实例属性,然后你说你想要自动生成getter和setter。
现在,你可以说你有一个属性,编译器会在编译时自动生成实例属性。它消除了明显的冗余。
答案 1 :(得分:2)
对我来说,这是一个初学者,好像我宣布了这个属性 两次?或者我在那里的第一行做其他事情?
一个属性和备份它的实例变量(如果有的话)是两个不同的东西。属性实际上只是该类提供某些访问器方法的承诺。所以你必须分别声明属性和ivar并不奇怪。然而,事实上,大多数属性都是由具有相关名称的ivar支持,并且分别编写和维护这两个属性是一件苦差事。因此,Apple将ivar综合添加到编译器中,以便编译器为任何尚未存在ivar的合成属性生成ivar。此外,因为合成访问器是目前最常见的,并且因为即使属性标记为@synthesize
,编译器也将使用您提供的任何访问器,这将成为默认设置,因此您不再需要编译器指令。 / p>