2011-08-10 3 views

답변

3

static 변수가 스택 프레임이 스택에서 튀어 나올 때 파괴되지 않습니다 (일반적인 변수는 그렇지 않으면 서사시 메모리 누수가 발생합니다). 로컬 변수에만 액세스 할 수있는 전역 변수로 간주하십시오. 그들은 전체 프로그램이 끝날 때까지 살아있을 것입니다.

예 :

+ (id)sharedInstance { 
    static singletonInstance = nil; // for example 
    if (singletonInstance == nil) { 
    singletonInstance = [[self alloc] init]; 
    } 
    return singletonInstance; 
} 
+1

"스택 프레임"은 어떻습니까? –

+0

@Rudy Velthuis, 고마워. :) –

+1

FWIW, 스택 프레임이 "안쪽 {and}"이 아닙니다. 이는 반환 주소 및 일부 가정 위치 (예 : 스택 포인터 및 일부 레지스터를 임시 저장하는 것과 함께)와 함께 지역 변수 및 함수 인수 집합입니다. 현재 함수 블록에서 return을 호출 할 때 명시 적으로 return을 호출하거나 단순히 암묵적으로 끝까지 도달하면 무효가됩니다. –

1
범위는 단지 C.처럼 그리고 변수가 응용 프로그램의 수명 동안 유지됩니다 정적 및 클래스의 모든 인스턴스에 액세스 할 수 있기 때문에 파일 수준에

그것. 좋은 예는 싱글 톤 인스턴스를 참조하거나, 글로벌 카운터를 구현하거나, 리소스 잠금을 수행하는 것입니다.