0

私は特定の概念と少し混乱しています。私の質問をする最善の方法は、例を挙げて説明することです. 以下のコードでは、loan というプロパティを宣言し、このプロパティを合成しています。これは簡単な質問のように思えるかもしれませんが、「250.00」という値をローンに割り当てています。「self.loan = 250.00;」を実行する可能性のあるチュートリアルを Web で見たことがあります。VS 私の「ローン = 250.00;」どちらの方法でも同じことを達成しているようです。しかし、プロパティ名自体を使用するだけで十分なのに、なぜ「self.propertyName」を使用してプロパティにアクセスするのでしょうか?

//ClassA.h
@interface ClassA: UIViewController
@property double loan;
@end

//ClassA.m
@implementation ClassA
@synthesize loan;

-(void)doSomething{
  loan = 250.00;
}
4

3 に答える 3

3

@synthesizeまた、プロパティの基になるインスタンス変数を生成します。これは、残念ながら、デフォルトではプロパティと同じ名前になっています。

これは、を使用する場合loan = 250.0、実際には、経由ではなく、基になるインスタンス変数に直接アクセスしていることを意味します。プロパティアクセサ。@synthesize行を次のように変更すると、これを確認できます。

@synthesize loan = _loan;

これで、コードはコンパイルされなくなり、をself.loan介してアクセスするにはどちらかを使用する必要があります。生成されたプロパティアクセサー、または_loan基になるインスタンス変数にアクセスします。

于 2012-06-04T00:50:37.660 に答える
2

それらは完全に同じではありません。

self.loan = 250.00;

本当に略記です

[self setLoan:250.00];

これはメソッド呼び出しです。一方、loan = 250.00その値をメモリの適切な部分に直接書き込むだけです。

この違いは、たとえば、別のコードがKey-ValueObservingを使用してローンプロパティの変更を監視している場合に重要になります。を呼び出すことによりsetLoan:、すべての適切な通知が発生します。loan直接設定することにより、設定しません。

また、自動参照カウントを使用していない場合、setメソッドは、新しい値が保持され、古い値が適切に解放されることを保証します。(ARCを使用している場合、これはどちらの方法でも自動的に処理されます。)

于 2012-06-04T00:52:27.860 に答える
1

これは、基になる変数を参照するだけself.loanでプロパティを参照するためです。、またはその他の修飾子loanを持つ参照型のキーです。retaincopy

于 2012-06-04T00:49:25.967 に答える