2009-04-08 1 views
0

Можно ли присвоить значение переменной экземпляра во время метода класса initialize?Установка переменной экземпляра в initialize

Я объявляю несколько массивов, а затем создаю массив массивов, а затем присваиваю его 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.