【问题标题】:Setting an instance variable in initialize在初始化中设置实例变量
【发布时间】:2010-10-18 10:14:49
【问题描述】:

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

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

}

【问题讨论】:

    标签: objective-c initialization


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-17
        • 2023-03-14
        • 1970-01-01
        • 2011-06-21
        • 2014-06-28
        • 2023-03-08
        • 2013-08-14
        • 2017-04-05
        相关资源
        最近更新 更多