인터페이스 구현에서 정적 변수의 의미는 무엇입니까?
-
23-08-2019 - |
문제
인터페이스 구현에 정의 될 때 정적 변수를 이해하지 못합니다. 방법에서는 로컬 변수와 어떻게 다른지 이해하지만 구현에서 직접 정의 할 때는 이해하지 못합니다.
이 예를보십시오. 이 두 사람은 실제로 어떤 차이를 만들어 냅니까?
#include "MyClass.h"
@implementation MyClass
int myInt;
...
@end
그리고:
#include "MyClass.h"
@implementation MyClass
static int myInt;
...
@end
myInt
두 경우 모두 모든 방법으로 보이고 테스트를 해석하면 올바르게 실행되었습니다. myInt
두 경우 모두 클래스의 다른 인스턴스에 대해 동일한 변수가됩니다.
해결책
해당 컨텍스트의 '정적'키워드는 평범한 C와 동일합니다. myint의 범위를 현재 파일로 제한합니다.
다른 팁
불행히도, 사용 위치에 따라 다른 영향을 미칩니다.
정적 기능 :
기본적으로 모든 기능에는 전역 범위가 있습니다. 정적 지정자를 사용하면 함수의 범위를 현재 파일로 제한 할 수 있습니다.
정적 로컬 변수 :
로컬 변수에서 정적 수정자를 사용하면이 함수는 호출 전반에 걸쳐 그 값을 "기억"합니다. 예를 들어, 다음 스 니펫의 CurrentCount 변수는 절대 재설정되지 않으므로 main () 내부의 변수에 카운트를 저장하는 대신 COUNTBYTWO ()가 우리를 위해 녹화 할 수 있습니다.
// main.m
#import <Foundation/Foundation.h>
int countByTwo() {
static int currentCount = 0;
currentCount += 2;
return currentCount;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"%d", countByTwo()); // 2
NSLog(@"%d", countByTwo()); // 4
NSLog(@"%d", countByTwo()); // 6
}
return 0;
}
이러한 정적 키워드의 사용은 로컬 변수의 범위에 영향을 미치지 않습니다.
더 자세히 알아보십시오 정적 키워드.
"C와 Objective-C 모두에서 정적 변수는 프로그램의 전체 수명에 할당 된 변수입니다. 이는 단일 함수 호출 중에 수명이 존재하는 자동 변수와 대조적이며, 객체와 같은 동적으로 할당 된 변수입니다. 더 이상 사용하지 않을 때 메모리에서 해제 할 수 있습니다. 더 간단히 말하면, 정적 변수의 값은 모든 함수/메소드 호출에 걸쳐 유지됩니다. 함수 외부에 선언하면 정적 변수가 파일의 모든 내에있는 모든 것이 보입니다. 선언 된; 함수 또는 방법 내부에서 선언하면 해당 함수 또는 방법 내에서만 볼 수 있지만 값은 통화간에 유지됩니다. "
여기에서 전체 설명을 확인하십시오.
Apple의 "The Objective-C 프로그래밍 언어"에서 : "변수 선언 공전 범위를 클래스와 파일에서 구현 한 클래스의 일부로 제한합니다. (따라서 인스턴스 변수와 달리 정적 변수는 서브 클래스에 의해 상속되거나 직접 조작 될 수 없습니다) "