0

リンクのプロパティドキュメントを調べていました: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html セクション「カスタムアクセサメソッドを実装できます」について説明していますそのプロパティは、常に独自のインスタンス変数によってサポートされる必要はありません。fullName の例でも、独自の対応するメンバーは使用されていません。

プロパティが定義されている場合 (_propertyName)、コンパイラは暗黙的にメンバーを作成しませんか?

4

2 に答える 2

0

デフォルトのsetterとgetterをオーバーライドし、@ synthesizeを指定しない場合(および_ivarにアクセスしない場合)、コンパイラーによって変数は作成されません。その場合、ivarに裏打ちされていないプロパティがあります。

非常にランダムな例として:

@property(nonatomic)int x;

-(int)x
{{
  1を返します。
}

-(void)setX:(int)x
{{
  NSLog(@ "%d"、x);
}

他のクラスのファサードがあり、このセッター/ゲッターを使用してそれらを設定/取得する場合は、よりユーザーフルに使用できます。

set / getterをオーバーライドせず、@ synthesizeがデフォルトで必須ではなくなった場合、コンパイラは_propertynameという名前のivarを作成します。これにより、この動作をオーバーライドできます。@synthesize prop_name=ivar_name

于 2013-02-26T14:36:10.843 に答える
0

を使用してプロパティを作成する@propertyと、ivar が自動的に作成され、そのセッターとゲッターが LLVM コンパイラによって作成されます。

一方、ivar を作成するときは、そのためのセッター/ゲッターを作成する必要があります。通常@property、コンパイラーを使用して残りを残します。

ただし、場合によっては、別の名前で ivar とプロパティを作成し、次のように参照します。

@synthesize boxDescription=boxName;

現在、boxName は boxDescription のアクセサーでありboxDescription、コードで使用することはできません。

于 2013-02-26T14:27:34.000 に答える