在初始化中设置实例变量
问题描述:
在初始化类方法期间是否可以为实例变量赋值?在初始化中设置实例变量
我声明了一些数组,然后创建一个数组数组,然后将其分配给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]
}
答
由于您没有对实例的引用,因此无法在类方法中设置实例变量。一个类上的initialize
方法被称为该类第一次接收到任何消息,并且打算在处理任何实际消息之前执行类的全局设置。例如,设置初始用户默认值通常在应用程序的控制器或委托类的initialize
方法中完成。
要设置实例变量,您应该在对象的指定初始值设定项中执行此操作(默认为init
,但某些对象如果需要参数则更改指定的初始值设定项)。例如:
- (id)init {
if((self = [super init])) {
myInstanceVariable = (int *)malloc(50 * sizeof(int));
}
}
- (void)dealloc {
free(myInstanceVariable);
[super dealloc];
}
在这里,你居然要self
一个参考,你可以使用,因为对象的不同实例已被分配。
答
我觉得你无所适从initialize
一样。这是初始化类本身。没有实例,因此没有实例变量。要初始化实例,请覆盖init
方法。