gpt4 book ai didi

ios - 读写属性是否需要@synthesize?

转载 作者:行者123 更新时间:2023-11-28 22:25:21 26 4
gpt4 key购买 nike

从 Xcode 4.4 开始具有默认的属性综合。它会自动生成:

  @synthesize name = _name;

source

来自source2

readwrite vs readonly 确定合成属性是否具有合成访问器(readwrite 具有 setter 并且是默认值,readonly 没有)。

因此,我得出结论,@synthesize name = _name; 不是 readwrite 所必需的,但它是 readonly 所必需的

但是,在 Apple 的 spritekit Adventure 代码 ( adventure code download link ) 中,APAAdventureScene.m:

"heroes"(readwrite) 在这个例子中是合成的。如果它没有合成,它会给出这个错误:使用未声明的标识符'_heroes'

读写属性是否需要@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

最佳答案

@synthesize 不再需要任何东西,只要您使用现代 LLVM 编译器(现在超过 1 年的默认编译器)。

readwrite 是默认值,因此两个属性都是可读/可写的。发布代码中的 @synthesize 行没有任何原因。

唯一的异常(exception)是,如果您明确地为 readwrite 属性同时提供“setter”和“getter”。然后ivar不会自动生成。对于 readonly 属性,如果您提供明确的“getter”,则不会生成 ivar。

关于ios - 读写属性是否需要@synthesize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com