0

幅と高さのプロパティを持つ Rectangle クラスがあります。Origin (-(XYPoint *) origin )呼ばれるインスタンス プロパティ/オブジェクトもあります。以下は、XYPoint オブジェクトを引数として渡す指定イニシャライザーのコードです。このメソッドで XYPoint クラスのプロパティを引数として取得し、XYPoint オブジェクトを初期化してメソッド内でメモリを割り当てる方法はありますか (または問題ありませんか)。それ以外の場合は、メイン プログラムで XYPoint オブジェクトを作成し、それを引数として渡す必要があります。これは、より多くのコードを入力する必要があります。

-(id) initWithWidth:(int)w andHeight:(int)h andOrigin:(XYPoint *)o
{
    self = [super init];
    if (self) {
        [self setWidth: w andHeight: h];
        self.origin = o;
    }
    return self;
}

PS-私はプログラミングとObjective Cが初めてなので、質問で技術的に間違ったことを述べた場合はご容赦ください。ありがとう!

4

1 に答える 1

0

個人的には、パラメータを取るイニシャライザを避けるようにしています。それはより多くのコードを書くことと柔軟性の欠如につながると思います。指定された初期化子を使用するのは、次の 2 つのことだけです。

  • オブジェクトの初期化後に変更してはならないプロパティを持つオブジェクトの初期化
  • オブジェクトを構築するために絶対に必要で、後で指定できないプロパティでオブジェクトを初期化する

一般に、Rectangle クラスの場合、次のように使用します。

Rectangle * r = [ [ Rectangle alloc ] init ] ;
r.x = x ;
r.y = y ;
r.origin = o ;

// use r

上記の条件を除いて、指定された初期化子パターンをまったく使用しないでください。(たとえば、不変の Rectangle インスタンスを作成する)

最後に、おそらく Rectangle クラスを作成する必要はありません。CGRect/NSRect プリミティブ構造を使用するだけです。

于 2012-08-02T23:29:47.370 に答える