2009-04-08 6 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 메서드를 재정의하십시오.