1

単純なデータ、たとえば NSInteger のセッター/ゲッターの概念を理解するのは簡単です。

私たちが言うなら: NSInteger a;

「a」のセッターは a の値を変更し、ゲッターはその値のみを取得 (返し) します。アトミックは、a が変更されているときに "a" を読み取ると常に整数値を返すことが保証されるため (ゲッターとセッターは同期されます)、アトミック/非アントミックの概念を理解するのは簡単です。

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

私たちが言うなら: NSMutableData *m_my_mutable;

オブジェクト MyObject に属するこのプロパティのセッター setMyMutable と getMyMutable があるとします。これを行う場合、ゲッターを呼び出します (データを追加する前にオブジェクトを取得するため):

[[MyObject getMyMutable] appendData....]

しかし appendingData もそれを変更するので、代わりにセッターアクションと見なされるべきではありませんか? または、セッターは値を初期化するという事実のみを参照します(たとえば、保持できます)。

コンセプトに欠けているものがあります。

ありがとうApple92

4

2 に答える 2

2

セッターはプロパティの値を設定します。整数プロパティを設定すると、新しい整数値が格納されます。オブジェクト プロパティを設定すると、新しいオブジェクトが格納されます。appendData:プロパティは変更されません —データ オブジェクト自体が変更されます。アトミック プロパティは、プロパティが完全な値または別の値を保持することのみを保証します。プロパティ内のオブジェクトの操作には影響しません。

ちなみに、所有しているオブジェクトの外部からアクセスできる可変状態 (NSMutableData オブジェクトなど) を持つことは、ほとんどの場合、悪い考えです。これを行うと、複数のオブジェクトがすべて独自の変更を加えようとし、互いに踏みつけ合うのが非常に簡単になります。

于 2010-11-30T23:56:08.907 に答える
0

設定は、実際には初期化のみを指します。これが、変更可能なデータ構造がスレッドセーフであることを保証するには原子性が十分でない理由です。代わりに、オブジェクトが一挙に置換または読み取られるだけであることが保証されるため、部分的な代入が発生することはありません。

于 2010-11-30T23:43:14.330 に答える