iOS 학습 노트 09--const,宏,static,extern

참고:http://www.yyxt.com/tutorial/10576.html 1.const 와 매크로 의 차이 에 자주 사용 되 는 문자열 상수 입 니 다.일반적으로 매크로 로 추출 되 지만 애플 은 공식 적 으로 매크로 를 사용 하 는 것 을 추천 하지 않 고 const 상수 로 사용 하 는 것 을 추천 합 니 다.
컴 파일 시간:매크로 는 사전 컴 파일(컴 파일 전 처리)이 고 const 는 컴 파일 단계 입 니 다.컴 파일 검사:매크로 는 검 사 를 하지 않 고 컴 파일 오 류 를 보고 하지 않 습 니 다.교체 만 할 뿐 const 는 컴 파일 검 사 를 하고 컴 파일 오 류 를 보고 합 니 다.매크로 의 장점:매크로 는 일부 함수,방법 을 정의 할 수 있 습 니 다.const 안 돼.매크로 의 나 쁜 점:대량의 매크로 를 사용 하면 컴 파일 시간 이 오래 걸 리 기 쉬 우 며 매번 다시 교체 해 야 합 니 다.메모:많은 블 로그 에서 매크로 를 사용 하면 메모리 가 많이 소모 된다 고 합 니 다.저 는 이 검증 을 통 해 많은 메모리 가 생 성 되 지 않 습 니 다.매크로 는 상수 이 고 상수 구역 에 두 면 메모리 만 생 성 됩 니 다.
1.매크로 의 용법:
#define MACRO_STR @"this is macro string"//   
NSString *macroStr1 = MACRO_STR;         //   
NSString *macroStr2 = MACRO_STR;         //   

macroStr 1 과 macroStr 2 의 주소 값 을 비교 해 보면 주소 값 이 일치 하 는 것 을 발견 할 수 있 습 니 다.
2.const 의 용법:(1)기본 데이터 유형 에 대해 다음 과 같은 두 가지 방법 은 모두 상수 로 한다.
int const aa = 10;
const int bb = 10;
aa = 11;//  
bb = 11;//  

aa,bb 는 모두 읽 기 전용 상수 이다.
(2)포인터 유형
// *str1     ,str1     
// *str1   ,str1   
const NSString *str1 = @"const str1";

// *str2     ,str2    
// *str2   ,str2   
NSString const *str2 = @"const str2";

// str3     ,*str3    
// str3   ,*str3   
NSString *const str3 = @"const str3";

//  :str1、str2   ; const      

계속 밤 들 기:
int * const i = 1; // *i   ,i   
int const *j = 1;  // *j   ,j   

3.const 의 사용 장면:a.방법 을 정의 합 니 다.방법 매개 변 수 는 주소 이 고 주소 로 만 값 을 읽 을 수 있 으 며 주소 로 값 을 수정 할 수 없습니다.
실현:
-(void)method1:(int const *)a{
    int i = *a;
    NSLog(@"%d",i);//   
}

호출:
int iii = 10;
[self method1:&iii];//  :10

b.방법 을 정의 합 니 다.방법 매개 변 수 는 주소 이 고 그 안에 매개 변수의 주 소 를 수정 할 수 없 으 며 매개 변수의 값 만 수정 할 수 있 습 니 다.
실현:
-(void)method2:(int * const)a{
    *a = 20;
    NSLog(@"%d",*a);//    
}

호출:
int cc = 30;
[self method2:&cc];//  :20

2.static 과 extern 의 간단 한 사용:1.static:부분 변 수 를 수식 합 니 다.1.부분 변수의 생명 주 기 를 연장 하고 프로그램 이 끝나 야 소각 합 니 다.2.부분 변 수 는 하나의 메모리 만 생 성하 고 한 번 만 초기 화 합 니 다.3.부분 변수의 역할 영역 을 바꾼다.
전역 변 수 를 수식 합 니 다.1.이 파일 에 만 접근 할 수 있 습 니 다.전역 변 수 를 수정 하 는 역할 영역 입 니 다.수명 주 기 는 변경 되 지 않 습 니 다.2.전역 변 수 를 중복 정의 하지 않도록 합 니 다.
2.extern 은 전역 변수(전역 정적 변수 포함)의 값 을 가 져 오 는 데 사용 되 며 변 수 를 정의 할 수 없습니다.작업 원리:현재 파일 에서 전역 변수 가 있 는 지 찾 지 못 해서 다른 파일 을 찾 습 니 다.
3.static 와 const 의 공동 사용
static 와 const 역할:읽 기 전용 정적 변 수 를 설명 합 니 다.
사용 장면 개발:한 파일 에서 자주 사용 되 는 문자열 상수,static 와 const 조합 을 사용 할 수 있 습 니 다.
static const int a = 20; 

개발 에 서 는 매크로 대신 자주 사용 하 는 문자열 상수 를 정적 전역 읽 기 전용 변수 로 정의 합 니 다.키 값 으로 읽 기만 하고 수정 할 수 없습니다.
4.extern 과 const 의 공동 사용
개발 에 사용 되 는 장면:여러 파일 에서 자주 사용 되 는 같은 문자열 상수 로 extern 과 const 를 조합 할 수 있 습 니 다.
원인:
static 와 const 조합:모든 파일 에서 정적 전역 변 수 를 정의 해 야 합 니 다.
extern 과 const 조합:전역 변 수 를 정의 하고 여러 파일 을 공유 해 야 합 니 다.
전역 상수 정규 표기 법:개발 과정 에서 모든 전역 변 수 를 관리 하기 쉽 고 보통 GlobeConst 파일 을 만 듭 니 다.그 안에 전역 변 수 를 정의 하고 통일 적 으로 관리 합 니 다.그렇지 않 으 면 프로젝트 파일 을 찾기 가 쉽 지 않 습 니 다.
extern NSString * const nameKey = @"name";

좋은 웹페이지 즐겨찾기