在初始化中设置实例变量

时间:2009-04-08 21:08:51

标签: objective-c initialization

是否可以在初始化类方法期间为实例变量赋值?

我正在声明一些数组,然后创建一个数组数组,然后将它分配给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]

}

2 个答案:

答案 0 :(得分:3)

我认为你对initialize的作用感到困惑。这是初始化类本身。没有实例,因此没有实例变量。要初始化实例,请覆盖init方法。

答案 1 :(得分:3)

您无法在类方法中设置实例变量,因为您没有对实例的引用。类的initialize方法在类第一次接收任何消息时调用,并且用于在处理任何实际消息之前执行您的类可能需要的任何类型的全局设置。例如,设置初始用户默认值通常在应用程序控制器或委托类的initialize方法中完成。

要设置实例变量,您应该在对象的指定初始值设定项中执行此操作(默认情况下为init,但如果需要参数,某些对象会更改指定的初始值设定项)。例如:

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

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

这里你实际上有一个self的引用,你可以使用它,因为已经分配了一个对象的独特实例。