0

Xcode 4.4 以降には、プロパティのデフォルト合成があります。これは自動的に生成されます:

  @synthesize name = _name;

ソース

そしてsource2から

readwrite と readonly は、合成されたプロパティに合成されたアクセサーがあるかどうかを決定します (readwrite には setter があり、デフォルトですが、readonly にはありません)。

@synthesize name = _name;したがって、読み取り書き込みには必要ありませんが、読み取り専用には必要であると結論付けました

ただし、Apple のスプライトキット アドベンチャー コード (アドベンチャー コードのダウンロード リンク) では、 APAAdventureScene.m:

この例では、「heroes」(読み書き) が合成されています。合成されていない場合は、次のエラーが発生します: Use of undeclared identifier '_heroes'

@synthesizereadwrite プロパティには必須ですが、混乱していますか?

ありがとうございました

 @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
4

1 に答える 1

2

@synthesize最新の LLVM コンパイラを使用している限り、もはや何も必要ありません (1 年以上のデフォルト)。

readwriteがデフォルトであるため、両方のプロパティが読み取り/書き込み可能です。@synthesize投稿されたコードの行に理由はありません。

readwriteこれに対する唯一の例外は、プロパティに「setter」と「getter」の両方を明示的に指定する場合です。その場合、ivar は自動的に生成されません。プロパティの場合readonly、明示的な「ゲッター」を指定した場合、ivar は生成されません。

于 2013-10-03T05:37:07.787 に答える