인터페이스 구현에서 정적 변수의 의미는 무엇입니까?
인터페이스 구현에 정의 된 정적 변수를 잘 이해하지 못합니다. 메서드에서 나는 그들이 지역 변수와 어떻게 다른지 이해하지만 구현에서 직접 정의 할 때는 이해하지 못합니다.
이 예를보십시오. 이 두 가지가 실제로 어떤 차이를 만들까요?
#include "MyClass.h"
@implementation MyClass
int myInt;
...
@end
과:
#include "MyClass.h"
@implementation MyClass
static int myInt;
...
@end
myInt
두 경우 모두 모든 메서드에서 볼 수 있으며 올바르게 실행 한 테스트를 해석하면 myInt
두 경우 모두 클래스의 다른 인스턴스에 대해 동일한 변수가됩니다.
해당 컨텍스트의 'static'키워드는 일반 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;
}
이 static 키워드 사용은 지역 변수의 범위에 영향을주지 않습니다. static 키워드
에 대해 자세히 알아보십시오 .
"C와 Objective-C 모두에서 정적 변수는 프로그램의 전체 수명 동안 할당되는 변수입니다. 이는 단일 함수 호출 중에 수명이 존재하는 자동 변수 및 객체와 같이 동적으로 할당되는 변수와는 대조적입니다. , 더 이상 사용되지 않을 때 메모리에서 해제 될 수 있습니다. 간단히 말해서 정적 변수의 값은 모든 함수 / 메소드 호출에서 유지됩니다. 함수 외부에서 선언하면 정적 변수가있는 파일 내의 모든 항목에 표시됩니다. 선언 됨; 함수 또는 메서드 내에서 선언되면 해당 함수 또는 메서드 내에서만 볼 수 있지만 값은 호출간에 유지됩니다. "
여기에서 전체 설명을 확인하십시오.
https://stackoverflow.com/a/4965145/951349
Apple의 "The Objective-C Programming Language"에서 : " 정적 으로 변수를 선언하면 해당 범위가 클래스와 파일에 구현 된 클래스의 일부로 만 제한됩니다. 따라서 인스턴스 변수와 달리 정적 변수는 상속 될 수 없습니다. 하위 클래스에 의해 또는 직접 조작 됨). "
'Development Tip' 카테고리의 다른 글
Rails 바로 가기에서 nil이 아니고 비어 있지 않은지 확인하십시오. (0) | 2020.11.06 |
---|---|
Self를 반환하는 프로토콜 func (0) | 2020.11.06 |
하나의 쿼리로 두 테이블에서 삭제 (0) | 2020.11.06 |
sqlite의 ALTER COLUMN (0) | 2020.11.06 |
코드에서 android : versionName 매니페스트 요소 가져 오기 (0) | 2020.11.06 |