2012-04-15 3 views
2

変数とオブジェクトにプロパティを設定する実際の使用方法を理解するのに苦労しています。私は多くのチュートリアルとリンゴのドキュメントを読み込もうとしましたが、なぜ私たちはプロパティを使うべきか、なぜプロパティを合成する必要があるのか​​理解できませんでしたか?我々は宣言を考慮してobjective-cでどのようにプロパティを使用するかの実際的な例?

@property(nonatomic,retain) NSString *str; 

私たちはなぜプロパティを宣言する必要がありますか?私が理解する限り、私たちはあなたのクラスを通して文字列オブジェクトstrにアクセスできます。しかし、なぜここに財産を作る必要がありますか?

誰かお手伝いできますか?

+0

おそらく重複している可能性があります。しかし、私はこのシンプルではあるが、理解するのは難しい話題で十分だとは思わないので、残念です。 –

答えて

4

プロパティは、通常、クラスの外部からインスタンス変数にアクセスするために使用されます。

@synthesize str = _str; 

:あなたはあなたが得ることができるあなたのクラスへのポインタを持っている場合

は例えば、/あなたはまた、通常このように、@synthesizeにプロパティを持っているこの

someObject.str = @"some string"; 

のようにプロパティを設定しますそのスニペットでは、_strはプロパティが設定し取得するインスタンス変数です。

プロパティは基本的にアクセサ(セッター/ゲッター)を作成するためのショートカットです。

たとえば、あなたの財産を使用してセッターはこのようなものになります。

- (void)setStr:(NSString *)str { 
    if(str != _str) { 
     [_str release]; 
     _str = [str retain]; 
    } 
} 

をゲッターはこのようなものになります:プロパティを作成することにより

- (NSString *)str { 
    return _str; 
} 

を、前の2つのコード・ブロックあなたのために自動的に作成されます。

+0

保持設定の場合、古い値を解放する前に新しい値が古い値と等しくないかどうかを確認する必要があります。それ以外の場合は、後でそれを保持するには遅すぎる可能性があります。D –

+0

@Jenox oops、そうです。固定: – edc1591

+0

私たちがそれを保持/解放しない限り、コード内で_strにアクセスするべきではありません。右?それ以外の場合は、strプロパティを使用して_strにアクセスする必要があります。そうですか。 –

1

プロパティは、他のオブジェクトが、変数が宣言されたオブジェクト内の変数の値を検査して設定できるようにするパブリックインターフェイスです。

変数の値を取得して設定する明示的なメソッドを記述することで、同じことを達成できます。

Objective-Cのプロパティ/合成ペアは実際には、コンパイラがそれらのメソッドを構築してよく定義されたパターンを使用していることに注意してください。

void setStr:(NSString*) value; 
NSString* str; 

そして

Object.str = @"Hello world"; 
NSString* value = Object.str; 

がにそれぞれ変換し得ることを書き込み:

Objective-Cの

@property(nonatomic,retain) NSString *str; 
.... 
synthesize str; 
... 

でこのように

は2つのとして定義されたメソッドを作成して終わります

1

プロパティを使用すると、OBJの-Cプログラマに提供しています施設です。

プロパティの有無にかかわらずプログラムを書くことができます。

プロパティは、@synthesizeコンパイラ指令と組み合わせて使用​​できます。

プロパティ宣言は、メソッドのゲッタ/セッタのペアを宣言するようにコンパイラに指示します。 セッターとゲッターを手動でコーディングする必要があります。このプロパティ宣言では、ドット表記を使用してインスタンス変数にアクセスできます。コンパイラは、ドット記法を適切なゲッター/セッターメソッドに変換します。

ディレクタ@synthesizeディレクティブを使用して、getter/setterメソッドのコードを生成するようにコンパイラに指示できます。プロパティを使用して

は、あなたがより少ないコードを記述する必要があり、あなたは、ドット表記を使用することができます。 プロパティを使用しない別の方法では、getter/setterメソッドを記述する必要があり、ドット表記は許可されません。

どちらの方法でもプログラムを書くことができます。したがって、プロパティを使用して合成するのはあなた次第です。

関連する問題