2010-11-30 9 views
1

単純なデータのためのsetter/getterの概念を理解するのは簡単です。たとえばNSIntegerです。オブジェクトを持つゲッター/セッターを理解できない

私たちが言ったら:NSInteger a;

"a"のセッターはaの値を変更し、ゲッターはその値を取得(返す)するだけです。アトミック/ノンアトミックの概念を理解することは簡単です。なぜなら、アトミックでは、チャネリングされているときに "a"を読み取ると、常にゲッターとセッターが同期していることが保証されるからです。

しかし、私が明確に理解していないのは、オブジェクトへのポインタであるプロパティ(NSData *、NSString *など)のsetterとgetterです。たとえば、NSMutableDataとしましょう:

NSMutableData * m_my_mutable;

私のオブジェクトMyObjectに属するこのプロパティのsetMyMutableとgetMyMutableがあるとします。

[[MyObjectにgetMyMutable] appendData ....]

しかしappendingDataもこれsould、それを変更します:私はこれを行う場合は(私はデータを追加する前にオブジェクトを取得するため)、その後、私はゲッターを呼び出しますそれは代わりにセッターアクションとして見なされますか?あるいは、設定者は、値を初期化するという事実を参照するだけです(これは、例えば保持することができます)。

私は概念に欠けているものがあります。

おかげ Apple92

答えて

0

設定は確かにのみ、初期化を参照してくださいありません。これは、可変性のデータ構造がスレッドセーフであることを確実にするために不可分性が十分でない理由です。代わりに、あなたが得る保証は、オブジェクトが置き換えられたり読み込まれたりすることが激減し、部分的な割り当てで終わることがないということです。

2

setterはプロパティの値を設定します。整数プロパティを設定すると、新しい整数値が格納されます。オブジェクトプロパティを設定すると、新しいオブジェクトが保存されます。 appendData:はプロパティを変更しません - データオブジェクト自体をに変更します。アトミックプロパティは、そのプロパティが完全な値を保持していることを保証します。プロパティ内のオブジェクトを使って何をするかには影響しません。

ちなみに、所有オブジェクトの外部からアクセス可能な可変状態(NSMutableDataオブジェクトなど)を持つことは、ほとんど常に悪い考えです。いったんこれを行うと、複数のオブジェクトがそれぞれ独自の変更を行い、お互いにストンプするのが容易になります。

関連する問題