2

渡したオブジェクトを実際に保存しないセッターに最も適切なキーワードは何ですか? (コピー、保持、または譲渡)

具体的には、以下の endDate セッターは渡された日付を保存することはなく、内部的には numberOfNights NSUInteger を更新するだけです。

対応する getter は、startDate と numberOfNights を再結合して、新しい endDate オブジェクトを返します。

@property (nonatomic, readonly) NSDate *startDate;
@property (nonatomic) NSUInteger numberOfNights; //modifiable.
@property (nonatomic, copy) NSDate *endDate; //internally stored as an unsigned integer, number of nights.

copy 属性が最も理にかなっていると思います。(-setEndDate: に渡すポインターは、-endDate によって返されることはありません)

何かご意見は?

4

4 に答える 4

1

property実際に設定したり取得したりしないを定義するのはなぜですか? method次のように定義すると、コードがよりクリーンになり、他の人にとって理解しやすくなりませんか?

-(void)setEndDate:(NSDate *)endDate;

method次に、numberOfNights に新しい値を割り当てるこれを実装します。

于 2012-09-26T23:05:29.823 に答える
1

ゲッター/セッターを自分で実装すれば、保持と割り当てについて心配する必要はないと思います。これらのキーワードは、自動 getter/setter の動作にのみ影響します。ここでもコピーを安全に使用するか、完全に省略できます。(私はこの投稿を「私はそう信じています...」と書いています。なぜなら、私は少し錆びており、Xcode に戻ろうとしているからです。今年は、ARC が人気を博しているなどの理由で状況が劇的に変化しました。)

于 2012-09-26T23:04:57.867 に答える
0

書き込み専用のプロパティを持つことが非常に理にかなっているシナリオは考えられません。プロパティの唯一の目的が何か他のものを更新することである場合は、次のような名前のメソッドを使用して、コードができるだけ明確になるようにします。

- (void)updateNumberOfNightsWithEndDate:(NSDate *)endDate;

注意しないと、副作用のあるプロパティアクセサーを使用すると、コードが混乱する可能性があるため、一般に、それらの使用を最小限に抑えるようにしています。

于 2012-09-27T07:56:56.913 に答える
0

プロパティの主な利点は、プライベート ivar に基づくゲッターとセッターの面倒なボイラープレート コードの作成を自動化できることです。あなたの場合、プロパティは ivar によってサポートされていません。とにかく手動のゲッターとセッターを書いているようです。それを考えると、@property構文は混乱しているだけだと思います(ご存知のように)。2 つのメソッドを宣言し、それらを実装してnumberOfNights舞台裏で使用します。

- (NSDate *)endDate;
- (void)setEndDate:(NSDate *)date;

そうしないと、アクセサーを手動で実装しているため、使用する修飾子 (retain、copy、assign) は無視されます。

于 2012-09-26T23:07:03.933 に答える