5

プロパティに x/y グリッドの座標が含まれるクラスを定義する予定です。ただし、これの設計にアプローチする「最善の」方法がわかりません。それは非常に単純な問題です。私はそれを正しく行い、正当化したいと思っています!

int解決策の 1 つは、オブジェクト内に x 用と y 用の ' ' 型の 2 つのプロパティを用意することです。

もう 1 つは、x/y 値を含む 2 つの int の typedef 構造体を定義し、名前を付けること<ClassPrefix>Coordinateです。に似ていCGSizeますか?

これを行う他の/より良い方法はありますか? どちらが好ましいですか?どちらの方法でも正当化する方法がわかりません。

ありがとう!

ティム。

4

3 に答える 3

11

「どっちがいい?」の答え。質問はいくつかの要因に依存します:

  • このようなアイテムをいくつ作成する予定ですか? - 答えが「数百万」の場合、struct勝ちです。答えが「58」の場合、オブジェクトが勝ちます。
  • その上でメソッドを定義する必要がありますか? - 答えが「はい」の場合、オブジェクトが勝ちます。そうでなければ、structOKかもしれません。
  • その配列を定義する予定はありますか? - 答えが「はい」のstruct場合は、より良い選択かもしれません。
  • 頻繁に作成および破棄する必要がありますか? - 答えが「はい」のstruct場合は、より良い選択かもしれません。

最終的には、設計上の制約が最適なものを決定するのに役立ちます。普遍的に「より良い」データ構造はありません。

于 2013-03-12T10:43:02.153 に答える
4

@dasblinkenlight の回答に加えて、決定に関するアドバイスをいくつか提供します。

  • 作成後、構造は不変ですか?
    オブジェクトを使用します。

  • 構造体は、他のオブジェクトまたは配列 (C 配列または の両方) へのポインターを所有 (= 保持) しますNSArrayか? オブジェクトと対話しますか (= オブジェクト パラメーターを持つメソッドを持っていますか)?
    次に、オブジェクトを使用します。

  • 構造体にはプリミティブ型 ( intfloat、その他structの s など) のみが含まれ、他のプリミティブ/構造体とのみ相互作用しますか?
    次にstruct、関数で a を使用します。

于 2013-03-12T10:58:24.493 に答える
1

それはトレードオフです。

クラスとそのインスタンスは、特に大量に作成する必要がある場合、リソースのコストが高くなります。それほど多くのインスタンスがない場合は、問題ありません。

構造体の方が高速ですが、拡張が難しく、最も不便なのは、構造体がオブジェクトまたはメソッドを保持できないことです。

あなたの例では、座標にのみ使用する場合は、構造体を使用することをお勧めします。ただし、それは設計とコードによって異なります。どちらが良いという絶対的な判断はありません。

于 2013-03-12T10:45:29.573 に答える