对于这种无用的帖子标题,很抱歉,但由于我不是很确定我在做什么,这是我能想到的最好的。
在我的头文件中,它看起来像这样
@interface RootViewController : UITableViewController {
NSMutableArray *eventsArray;
}
@property (nonatomic, retain) NSMutableArray *eventsArray;
@end
这并不是所有的属性,但为了简单起见,我删除了所有属性。
我遵循苹果开发者的指南来做这件事。似乎指南并没有完全更新,因为它告诉我要合成属性,我不应该再这样做了,对吧?
不管怎么说,为什么会这样呢?对于我这个初学者来说,似乎我声明了两次属性?或者我在那里的第一排做其他的事情?
发布于 2013-02-28 20:59:00
由于历史原因,使用较旧的编译器时,它是这样的。
现在你可以这样做:
@interface RootViewController : UITableViewController
@property (nonatomic, retain) NSMutableArray *eventsArray;
@end
按照你的方式,你声明了一个实例属性,然后你说你想自动生成getter和setter。
现在,你可以说你有一个属性,编译器会在编译时自动生成实例属性。它消除了明显的冗余。
发布于 2013-02-28 21:11:23
对我来说,
是一个初学者,似乎我声明了两次属性?或者我在那里的第一排做其他的事情?
属性和支持它的实例变量(如果有)是两个不同的东西。属性实际上只是类提供某些访问器方法的承诺。因此,必须分别声明property和ivar这一事实并不奇怪。然而,事实上,大多数属性都是由一个具有相关名称的ivar支持的,分别编写和维护这两个属性是一件很繁琐的事情。因此,Apple在编译器中添加了ivar合成,以便编译器为任何还不存在ivar的合成属性生成ivar。此外,由于合成访问器是迄今为止最常见的,而且即使属性标记为@synthesize
,编译器也会使用您提供的任何访问器,因此这成为默认设置,因此您不再需要编译器指令。
https://stackoverflow.com/questions/15136143
复制相似问题