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 回答