1

コピー セマンティクスを対象とした Objective-C クラスがあります。

 @property (copy) ViewState* viewState;

不変ではありませんが、ViewStateインスタンスに依存するものはすべて、独自の個別のコピーが必要です。実際、他のクラスが誤って試行した場合

 @property (strong) ViewState* viewState;

最終的にはクラッシュします。

クライアント クラスが正しいセマンティクスを使用するように強制または奨励するにはどうすればよいでしょうか。

たとえば、C++ では代入を禁止できます。

 private:
 CPViewState* operator=(const CPViewState*) const;  // no implementation

しかし、Objective-C ではそれができません。コピーを禁止したい反対のケースでは、エラーをログに記録するか、から例外をスローできますcopyWithZone:

コピー セマンティクスを要求する方法、または少なくとも将来の開発者にコピー セマンティクスを使用することを明確にする方法はありますか?

4

1 に答える 1

0

あなたが正しく説明したように、コピーセマンティクスはクラス自体から強制することはできません。

ViewState オブジェクトがどこで、どのように作成されるか、およびそれが概念的に何を意味するかに応じて、さまざまなことが機能する可能性があります。

あなたのプロジェクトで ViewState が何を意味するのかはわかりませんが、それが理にかなっていれば、クライアントが使用する ViewState オブジェクトを作成および/またはコピーするためのいくつかのメソッドを持つシングルトン/ファクトリ ViewStateFactory クラスを提供できます。ViewStateFactory は、クライアントが ViewState オブジェクトを要求するたびに新しいコピーが提供されるようにします。

これは、クラスのクライアントにボイラープレートを追加することに注意してください。また、人々が ViewStateFactory の背後にいて、ViewState オブジェクトを直接割り当てたり参照したりすることも妨げません。しかし、あなたの意図と、他の人にあなたのクラスをどのように使用してもらいたいかをより明確にすることができます.

于 2013-07-21T18:20:49.507 に答える