Objective-c 클래스 메소드에서 변수가 왜 static
으로 선언되는지 이해할 수 없습니까?왜 Objective-c 클래스 메소드에서 변수를 정적으로 선언합니까?
변수 static
의 범위는 무엇입니까?
Objective-c 클래스 메소드에서 변수가 왜 static
으로 선언되는지 이해할 수 없습니까?왜 Objective-c 클래스 메소드에서 변수를 정적으로 선언합니까?
변수 static
의 범위는 무엇입니까?
static
변수가 스택 프레임이 스택에서 튀어 나올 때 파괴되지 않습니다 (일반적인 변수는 그렇지 않으면 서사시 메모리 누수가 발생합니다). 로컬 변수에만 액세스 할 수있는 전역 변수로 간주하십시오. 그들은 전체 프로그램이 끝날 때까지 살아있을 것입니다.
예 :
+ (id)sharedInstance {
static singletonInstance = nil; // for example
if (singletonInstance == nil) {
singletonInstance = [[self alloc] init];
}
return singletonInstance;
}
그것. 좋은 예는 싱글 톤 인스턴스를 참조하거나, 글로벌 카운터를 구현하거나, 리소스 잠금을 수행하는 것입니다.
"스택 프레임"은 어떻습니까? –
@Rudy Velthuis, 고마워. :) –
FWIW, 스택 프레임이 "안쪽 {and}"이 아닙니다. 이는 반환 주소 및 일부 가정 위치 (예 : 스택 포인터 및 일부 레지스터를 임시 저장하는 것과 함께)와 함께 지역 변수 및 함수 인수 집합입니다. 현재 함수 블록에서 return을 호출 할 때 명시 적으로 return을 호출하거나 단순히 암묵적으로 끝까지 도달하면 무효가됩니다. –