2010-06-15 3 views
10

here에서 몇 가지 샘플 코드를 발견했습니다.+ (void) objective-c 클래스 정적 변수 생성자에서 초기화

static UIImage *backgroundImageDepressed; 

/** 
* 
*/ 
@implementation DecimalPointButton 

+ (void) initialize { 
    backgroundImageDepressed = [[UIImage imageNamed:@"decimalKeyDownBackground.png"] retain]; 
} 

이런 식입니까? +(void) initialize 메서드는 Objective C에서 클래스 (인터페이스)의 정적 변수를 초기화합니까? 나는 전에 이것을 본 적이 없다.

답변

17

+initialize 방법은 The Objective-C Programming Language에 설명되어 있습니다.

런타임 시스템은 클래스가 다른 메시지를 수신하기 전에 모든 클래스 객체 initialize에 메시지를 전송하고 그 후 수퍼 initialize 메시지를 받았다. 이렇게하면 클래스가 사용되기 전에 런타임 환경을 설정할 수 있습니다. 초기화가 필요하지 않으면 메시지에 응답하기 위해 initialize 메소드를 작성할 필요가 없습니다.

예를 들어, [DecimalPointButton alloc]이 호출되면 런타임에서 [DecimalPointButton initialize]이 호출되었는지 확인합니다. 그렇지 않은 경우 클래스가 +initialize입니다. 이렇게하면 backgroundImageDepressed 이미지가 준비되어 앞에 있고은 DecimalPointButton 인스턴스가 생성됩니다.

관련 문제