0

誰かがこのようなコードを書いているのを見ます

@interface SomeClass:<NSObject>{
       NSString * _iVar;

}

@property(nonatomic,retain)NSString *iVar;

そして実装ファイルで

@synthesize iVar = _iVar;

しかし、私はいつも次のようなコードを書くのが好きです:

@interface SomeClass:<NSObject>
@property(nonatomic,retain)NSString *iVar;

そして実装ファイルで

@synthesize iVar = _iVar;

それらはすべて正常に動作し、インスタンス someClass を使用して iVar "someClass.ivar" を取得できます。理由はわかりますか?

4

2 に答える 2

0

「。」を介して何かを使用している場合のObjective-Cで。(ドット構文)、プロパティにアクセスしています。iVar という名前のプロパティを宣言して合成したので、someClass.iVar でアクセスできます。

プロパティを宣言すると、変数が自動的に作成されます。したがって、変数を作成しなくても、そこに存在します。

あいまいさを避けるために、人々はプロパティと iVar を異なる名前で作成しています。したがって、変数が使用されているか、プロパティが使用されているかを識別できます。その場合、特定の変数が低い方法でプロパティに関連付けられていることをコンパイラに知らせます。

@synthesize iVar = _iVar;

プロパティではなくクラス外の変数に直接アクセスしたい場合は、"->" (矢印構文) を使用する必要があります。

于 2013-03-02T06:19:21.917 に答える
0

iVar を合成する必要さえなくなりました。最新の Xcode は、プロパティ名の前にアンダースコアを付けて、各プロパティのバッキング インスタンス変数を自動的に作成します。

于 2013-03-02T06:12:15.690 に答える