从Xcode 4.4开始,默认合成属性。它会自动生成:
@synthesize name = _name;
来自source2
readwrite vs readonly确定合成属性是否具有合成访问器(readwrite具有setter并且是默认值,readonly不是)。
因此,我得出结论,readwrite不需要@synthesize name = _name;
,但只读它需要
但是,在Apple的spritekit冒险代码(adventure code download link)中,APAAdventureScene.m:
“heroes”(readwrite)是在示例中合成的。如果它没有合成,它将给出这个错误:使用未声明的标识符'_heroes'
readwrite属性是否需要@synthesize
,我很困惑?
谢谢
@interface APAAdventureScene () <SKPhysicsContactDelegate>
...
@property (nonatomic, readwrite) NSMutableArray *heroes; // our fearless adventurers
@property (nonatomic) NSMutableArray *goblinCaves; // whence cometh goblins
...
@end
@implementation APAAdventureScene
@synthesize heroes = _heroes;
- (id)initWithSize:(CGSize)size {
...
_heroes = [[NSMutableArray alloc] init];
_goblinCaves = [[NSMutableArray alloc] init];
...
}
- (void)updateWithTimeSinceLastUpdate:(CFTimeInterval)timeSinceLast {
// Update all players' heroes.
for (APAHeroCharacter *hero in self.heroes) {
[hero updateWithTimeSinceLastUpdate:timeSinceLast];
}
// Update the caves (and in turn, their goblins).
for (APACave *cave in self.goblinCaves) {
[cave updateWithTimeSinceLastUpdate:timeSinceLast];
}
}
@end
答案 0 :(得分:2)
@synthesize
就不再需要了。
readwrite
是默认值,因此两个属性都是可读/写的。发布的代码中没有@synthesize
行的原因。
唯一的例外是,如果您为readwrite
属性明确提供“setter”和“getter”。然后不会自动生成ivar。对于readonly
属性,如果您提供明确的“getter”,则不会生成ivar。