iOS Objecttive-C 언어에서 상수를 정의하는 몇 가지 방식과 구별static const 정의 상수

최근에 effecttive Objective-C 2.0 -- 고품질 iOS와 OS X 코드를 작성하는 52가지 효과적인 방법
필자는 여기에 비교적 사용하기 좋은 방법과 기교를 기록하였는데, 만약 잘못이나 누락이 있으면 여러분의 지적을 환영합니다.
      1. 코드를 작성할 때 항상 상수를 정의해야 한다. 예를 들어 UI 보기 클래스를 작성하려면 이 보기가 나타나면 애니메이션을 재생하고 사라진다.너는 애니메이션을 재생하는 시간을 상수로 추출하고 싶을 수도 있다.아마도 이런 방법으로 할 것이다.
#define ANIMATION_DURATION 0.3;
상술한 예처리 명령은 소스 코드의 ANIMATION 을DURATION 문자열을 0.3으로 바꾸면 확실히 실현할 수 있지만 이렇게 정의된 변수는 유형 정보가 없습니다.애니메이션의 지속 재생 시간은 NSTimeInterval 유형이어야 하며, 그 외에 모든 ANIMATION에 미리 처리됩니다.DURATION은 일률적으로 0.3으로 바뀐다. 이 지령이 어떤 헤더 파일에 성명된다고 가정하면 이 헤더 파일을 도입한 모든 코드는ANIMATIONDURATION은 모두 0.3으로 바뀐다. 이것은 분명히 좋지 않다.
      2. 상수를 정의하기 위한 사전 처리 명령이 있습니다.
      static const NSTimeInterval kAnimationDuration = 0.3;
이런 방식으로 정의된 상수는 유형 정보를 포함하고 상수의 의미를 명확하게 묘사한다.상수의 유형을 알 수 있다. 상수를 많이 정의하면 혼란스럽지 않다.
또한 명명 규범에 주의해야 한다. 만약에 파일에서만 사용한다면 명명 앞에 k를 붙인다.만약 클래스의 외용에 사용된다면, 클래스 이름을 접두사로 삼아라.
가능한 한 헤더 파일 (.h 파일) 에서 상수를 정의하지 말고 실현 파일 (.m 파일) 에서 상수를 정의하십시오
변수는 반드시 static와const로 동시에 성명해야 합니다.const 수식자는 다른 사람이 설명한 변수를 수정하지 못하게 합니다. 변수 값이 바뀌면 컴파일러가 오류를 보고합니다.static 수식자는 이 변수의 컴파일러 단원 (어떤 종류의.m 파일) 만 볼 수 있고, 역할 영역은 제한됩니다.m 파일에서 변수를 설명할 때 static을 추가하지 않으면 컴파일러가 '외부 기호' 를 만들고 다른 파일의 이름을 바꾸면 오류가 발생합니다.
    3. 전역 변수: 알림 센터 등록 대상name가 유일하고 전역적인 상수를 대외적으로 공개해야 한다면, 이 문자열은 외부 수업의 상수 변수를 설명할 수 있습니다.이러한 상수는 글로벌 기호 테이블 글로벌 symbol table에 배치되어 이 상수를 정의하는 컴파일러 셀 외부에서 사용할 수 있습니다. 정의는 static const와 다릅니다.
//헤더 파일.h 파일
  extern NSString *const = XYStringConstant;
//파일을 구현합니다.m 파일 중
 NSString *const  XYStringConstant = @"VALUE";
상수의 헤더 파일(.h 파일)에서 성명하고 실행 파일(.m 파일)에서 정의합니다.const 수식자의 위치를 주의하십시오
extern 키워드: 컴파일러에게 전역 기호표에 XYStringConstant라는 기호가 있음을 알려 줍니다. 즉, 컴파일러는 정의를 볼 필요가 없고 코드가 이 상수를 사용할 수 있도록 합니다.
이러한 상수는 반드시 정의해야 하며 한 번(.m 파일 구현)만 정의할 수 있다. 파일이 목표 파일을 생성할 때 컴파일러는'데이터 세그먼트'에서 문자열에 저장 공간을 분배하고 링크는 이 목표 파일을 다른 목표 파일과 연결시켜 최종 2진 파일을 생성한다.이 상수를 사용할 때 링크는 그것을 해석한다.
#import <UIKit/UIKit.h>


extern NSString *const XYLoginMangerDidLoginNotification;

@interface XYViewController : UIViewController

@end
#import "XYViewController.h"

NSString *const XYLoginMangerDidLoginNotification = @"XYLoginMangerDidLoginNotification";

@implementation XYViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

상수의 이름을 주의하여 명칭 충돌을 피하십시오. (명칭 규범은 시스템 내부 명칭을 보십시오.)
4. 요약:
1. 예처리 명령으로 상수를 정의하지 마십시오. 이렇게 정의된 상수는 유형 정보를 포함하지 않습니다. 컴파일러는 컴파일하기 전에 찾기 교체 작업을 실행합니다.누군가가 상수 값을 다시 정의해도 컴파일러는 경고 정보를 주지 않기 때문에 프로그램의 상수 값이 일치하지 않을 것이다.
2. 구현 파일에서 static const를 사용하여'구현 파일에서만 볼 수 있는 상수'를 정의합니다. 이러한 상수는 전역 기호표에 없기 때문에 그 이름에 접두사를 붙일 필요가 없습니다.
3. 헤더 파일에서 extern을 사용하여 전역 변수를 설명하고 관련 실현 파일에서 그 값을 정의한다. 이런 상수는 전역 기호표에 나타나기 때문에 그 이름은 구분을 해야 한다. 보통 이와 관련된 클래스 이름을 접두사로 한다.

좋은 웹페이지 즐겨찾기