Установка переменной экземпляра в инициализации - PullRequest
0 голосов
/ 09 апреля 2009

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

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

}

Ответы [ 2 ]

3 голосов
/ 09 апреля 2009

Вы не можете устанавливать переменные экземпляра в методах класса, поскольку у вас нет ссылки на экземпляр. Метод initialize в классе вызывается в первый раз, когда класс получает какие-либо сообщения, и предназначен для выполнения любых глобальных настроек, которые могут понадобиться вашему классу перед обработкой любых реальных сообщений. Например, установка начальных пользовательских настроек по умолчанию обычно выполняется в методе initialize контроллера вашего приложения или класса делегата.

Чтобы установить переменные экземпляра, вы должны сделать это в назначенном инициализаторе объекта (это init по умолчанию, но некоторые объекты изменяют назначенный инициализатор, если им нужно принять параметры). Например:

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

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

Здесь у вас есть ссылка на self, которую вы можете использовать, потому что выделен отдельный экземпляр объекта.

3 голосов
/ 09 апреля 2009

Я думаю, вы не понимаете, что делает initialize. Это для инициализации самого класса . Экземпляра нет, и, следовательно, нет переменных экземпляра. Чтобы инициализировать экземпляр, переопределите метод init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...