0

クラスの初期化メソッド中にインスタンス変数に値を割り当てることは可能ですか?

いくつかの配列を宣言してから、配列の配列を作成し、それをインスタンス変数であるself.monthsに割り当てています。なぜこれが機能しないのですか、そしてどうすればこれを達成できますか?

      +(void)initialize
 {
    // .....
        NSArray *matrix = [[NSArray alloc] initWithObjects:jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec, nil ];

    self.months = matrix;
    [matrix release]

}

4

2 に答える 2

3

私はあなたが何をするかについて混乱していると思いますinitializeクラス自体を初期化することです。インスタンスがないため、インスタンス変数はありません。インスタンスを初期化するには、メソッドをオーバーライドしますinit

于 2009-04-08T21:15:44.507 に答える
3

インスタンスへの参照がないため、クラスメソッドにインスタンス変数を設定することはできません。クラスのinitializeメソッドは、クラスがメッセージを最初に受信したときに呼び出され、実際のメッセージが処理される前に、クラスが必要とする可能性のあるあらゆる種類のグローバル設定を行うことを目的としています。たとえば、初期ユーザーデフォルトの設定は、通常initialize、アプリケーションのコントローラーまたはデリゲートクラスのメソッドで行われます。

インスタンス変数を設定するには、オブジェクトの指定された初期化子でこれを行う必要があります(これはinitデフォルトですが、特定のオブジェクトは、パラメーターを取得する必要がある場合、指定された初期化子を変更します)。例えば:

- (id)init {
  if( (self = [super init]) ) {
    myInstanceVariable = (int *)malloc(50 * sizeof(int));
  }
}

- (void)dealloc {
  free(myInstanceVariable);
  [super dealloc];
}

ここにselfは、オブジェクトの個別のインスタンスが割り当てられているため、実際に使用できる参照があります。

于 2009-04-08T21:15:54.880 に答える