iOS의 static const extern

1831 단어

전언


이전에static,const,extern의 사용은 모두 그대로 따랐을 뿐 그 의미를 알지 못했기 때문에 최근에 프로젝트에서도 활용했기 때문에 기록을 작성했습니다.우리는 자주 등록UITableViewCell할 때 identifier의 키워드를 사용한다. 그러면 우리는.m 파일의 코드에는 다음과 같은 코드가 자주 나타납니다.
static NSString * const      = @"    ";

다음 키워드의 의미는 다음과 같습니다.

static


하나의 전역 변수에 이 키워드를 더하면 이 변수는 정적 전역 변수로 정의된다. 정적 전역 변수는 전체 파일을 볼 수 있고 파일 이외에는 볼 수 없다. 일반 프로그램은 새로 발생한 동적 데이터를 더미에 저장하고 함수 내부의 자동 변수를 창고에 저장한다.자동 변수는 일반적으로 함수의 퇴출에 따라 공간을 방출하지만 정적 변수는 함수의 퇴출로 공간을 방출하지 않는다.정적 변수를 정의하는 장점은 메모리를 절약할 수 있다는 데 있다.

extern


이 키워드는 컴파일러에게 "현재 컴파일된 파일에 이 파일이 정의하지 않았지만 다른 파일에서 정의할 수 있는 식별자가 있습니다."라고 알리기 위해서입니다.우리는 일반적으로 이렇게 쓴다.
//xxxx.h
extern NSString *defaultSomething;

//xxxx.m
NSString *defaultSomething = @"xxxx";

extern과static


이 두 키워드는 마찬가지로 전체 국면의 변수를 수식하지만, 그들은 매우 큰 차이가 있다.
  • static 수식된 전역 변수는 전역 정적 변수로 변하고 그 작용역은 이 변수가 있는 파일에 있다.
  • extern 수식의 전역 변수는 기본적으로 외부 링크가 있지만 그 역할 영역은 전체 프로젝트이고 그 정의는 프로젝트 내의 임의의 파일에 있을 수 있다.

  • const


    이 키워드는 변수를 상수로 변환할 수 있는데 Swiftvarlet의 수식자에 해당하지만 const의 위치가 다르면 그 역할도 다르다.
    int me;
    1.const int *p1 = &me;
    2.int* const p2 = &me;
    3.int const *p3 = &me
    

    위 코드에서 1 우리가 수정*p1을 시도할 때 컴파일러는 *p1는 수정할 수 없고 우리가 수정p1할 때 정상적으로 수정할 수 있다고 알려준다.우리가 코드 2중*p2을 수정하려고 시도했을 때는 정상적으로 수정할 수 있었지만, 수정p2을 시도했을 때는 수정할 수 없었다.그러면 코드 3의 경우 코드 1과 마찬가지로 const 오른쪽에 수식된 부분을 알 수 있다.
    우리는 우리가 보통 쓰는 static NSString * const cellIdentifer = @"cell" 이 코드를 돌이켜 보면 그 뜻을 잘 이해할 수 있다.

    좋은 웹페이지 즐겨찾기