Development Tip

인터페이스 구현에서 정적 변수의 의미는 무엇입니까?

yourdevel 2020. 11. 6. 20:41
반응형

인터페이스 구현에서 정적 변수의 의미는 무엇입니까?


인터페이스 구현에 정의 된 정적 변수를 잘 이해하지 못합니다. 메서드에서 나는 그들이 지역 변수와 어떻게 다른지 이해하지만 구현에서 직접 정의 할 때는 이해하지 못합니다.

이 예를보십시오. 이 두 가지가 실제로 어떤 차이를 만들까요?

#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"에서 : " 정적 으로 변수를 선언하면 해당 범위가 클래스와 파일에 구현 된 클래스의 일부로 만 제한됩니다. 따라서 인스턴스 변수와 달리 정적 변수는 상속 될 수 없습니다. 하위 클래스에 의해 또는 직접 조작 됨). "

참고 URL : https://stackoverflow.com/questions/1087061/whats-the-meaning-of-static-variables-in-an-implementation-of-an-interface

반응형