Effective Objective-C 2.0 노트(1)

3123 단어
질 좋은 iOS와 OS X 코드를 작성하는 52가지 효과적인 방법 - 독서노트
최근에 읽고 있어요Effective Objective-C 2.0. 기록을 하고 싶어요. 저는 취미를 골라서 책에 나오는 순서와 달라요. 거기에 어디에 쓰는지 봤어요.

제4조: 유형 상수를 많이 사용하고 #define 예처리 명령을 적게 사용한다.


상수를 정의할 때, 우리는 보통 몇 가지 일을 확정해야 한다.
  • ?

  • 만약 우리가 애니메이션 시간을 정의할 때, 우리는 보통 이렇게 정의한다
    #define ANIMATION_DURATION 0.3
    

    이렇게 정의된 단점은요.
  • 는 뚜렷하지 않고 0.3이 시간과 관련이 있음을 명확하게 지적하지 않았다.
  • 가 너무 크면 예처리 과정은 모든 ANIMATION_DURATION를 일률적으로 0.3으로 바꾼다. 그러면 이 지령이 어떤 헤더 파일에 성명된다고 가정하면 이 헤더 파일에 도입된 코드ANIMATION_DURATION는 모두 바뀐다. 따라서 #define로 상수를 정의하고 .m 파일에도 넣어야 한다
  • ?, 이런 명명 방식은 규범이 없다. 다음은 규범의 정의 상수
  • 를 소개한다.
    정확한 정의 방식은 다음과 같은 두 가지 방식에 따라야 한다.
    첫째, 상수의 작용역은 현재 클래스에만 있다
    //in the implementation file - EOCAnimatedView.m
    static const NSTimeInterval kAnimationDuration = 0.3;
    

    둘째, 상수의 작용역은 현재 클래스를 인용한 모든 코드에서
    //in the header file - EOCAnimatedView.h
    extern const NSTimeInterval EOCAnimatedViewAnimationDuration;
    
    //in the implementation file - EOCAnimatedView.m
    const NSTimeInterval EOCAnimatedViewAnimationDuration = 0.3;
    

    왜 이렇게 정의를 내렸을까요?
  • 는 명확하고 0.3은 시간과 관련이 있기 때문에 NSTimeInterval로 설명하면 이해하기 쉽다
  • 는 상량의 작용역이 현재 클래스에만 있을 때 우리는 첫 번째 방법으로 정의했다. 상량의 작용역은 모든 현재 클래스를 인용한 코드에서 우리는 두 번째 방식으로 정의했다
  • ? 만약에 어떤 상량이 (translation unit) 즉'실현파일'즉 .m 파일에 국한된다면 앞에 자모k를 붙인다. 는 현재 클래스에서만 사용하기 때문에 구분할 필요가 없고 상량이 클래스 밖에서 볼 수 있다면 클래스 이름을 접두사로 한다. 에 들어가면 반드시 클래스 이름으로 구분해야 하기 때문이다
  • 왜 우리는 있을 수 없어.h 파일에서 정의 ? 의 정의는 .h 파일에 나타나지 말아야 한다. OC에namespace라는 개념이 없기 때문에 이 헤더 파일을 도입한 모든 다른 파일에 이 이름이 나타난다. 의 정의가 .h 파일에 나타나면 kAnimationDuration 하나의 를 성명한 것과 같다static.
    왜 상량의 작용역이 현재 클래스에만 있을 때, 우리는 첫 번째 방법으로 정의합니까? (.m) 수식자는 이 상수가 정의 (object file)에만 정의되어 있음을 의미하기 때문에 컴파일러가 컴파일러를 받을 때마다 한 부static를 출력합니다. 이 상수가 추가되지 않음 (external symbol)을 설명하면 컴파일러가 그것을 위해 를 만들 것입니다. 이때 다른 컴파일러도 같은 이름의 변수를 설명하면 컴파일러가 오류를 보고합니다.
    왜 상수의 작용역은 현재 클래스를 인용한 모든 코드에서 우리는 두 번째 방식으로 정의합니까? (global symbol table)에 넣어야 한다. 이 상수의 정의는 헤더 파일 에 있다. 실현 파일 에 있다. 그러면 컴파일러가 이 상수를 사용할 때 정의를 볼 필요가 없다. 즉, 코드가 이 상수를 사용할 수 있도록 허용하는 것이다. 왜냐하면 이진 파일로 연결된 후에 이 상수를 찾을 수 있다는 것을 알고 있기 때문이다.
    Note:
  • 상량의 정의는 오른쪽에서 왼쪽으로 해석해야 한다
  • 사용 이 사용#define보다 낫다. #define에 정의된 상수는 유형 정보를 포함하지 않기 때문에 컴파일러는 컴파일하기 전에 이것에 따라 찾기와 교체 작업을 수행할 뿐이다. 누군가가 상수 값을 다시 정의해도 컴파일러는 경고 정보를 주지 않기 때문에 프로그램의 상수 값이 일치하지 않는다
  • 좋은 웹페이지 즐겨찾기