문제

인터페이스 구현에 정의 될 때 정적 변수를 이해하지 못합니다. 방법에서는 로컬 변수와 어떻게 다른지 이해하지만 구현에서 직접 정의 할 때는 이해하지 못합니다.

이 예를보십시오. 이 두 사람은 실제로 어떤 차이를 만들어 냅니까?

#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 모두에서 정적 변수는 프로그램의 전체 수명에 할당 된 변수입니다. 이는 단일 함수 호출 중에 수명이 존재하는 자동 변수와 대조적이며, 객체와 같은 동적으로 할당 된 변수입니다. 더 이상 사용하지 않을 때 메모리에서 해제 할 수 있습니다. 더 간단히 말하면, 정적 변수의 값은 모든 함수/메소드 호출에 걸쳐 유지됩니다. 함수 외부에 선언하면 정적 변수가 파일의 모든 내에있는 모든 것이 보입니다. 선언 된; 함수 또는 방법 내부에서 선언하면 해당 함수 또는 방법 내에서만 볼 수 있지만 값은 통화간에 유지됩니다. "

여기에서 전체 설명을 확인하십시오.

https://stackoverflow.com/a/4965145/951349

Apple의 "The Objective-C 프로그래밍 언어"에서 : "변수 선언 공전 범위를 클래스와 파일에서 구현 한 클래스의 일부로 제한합니다. (따라서 인스턴스 변수와 달리 정적 변수는 서브 클래스에 의해 상속되거나 직접 조작 될 수 없습니다) "

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top