2009-04-08 57 views
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] 

}

回答

3

由于您没有对实例的引用,因此无法在类方法中设置实例变量。一个类上的initialize方法被称为该类第一次接收到任何消息,并且打算在处理任何实际消息之前执行类的全局设置。例如,设置初始用户默认值通常在应用程序的控制器或委托类的initialize方法中完成。

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

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

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

在这里,你居然要self一个参考,你可以使用,因为对象的不同实例已被分配。

3

我觉得你无所适从initialize一样。这是初始化类本身。没有实例,因此没有实例变量。要初始化实例,请覆盖init方法。