Effective Objective-C 2.0 노트(1)
최근에 읽고 있어요
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
파일에 나타나지 말아야 한다. OC에namespace라는 개념이 없기 때문에 이 헤더 파일을 도입한 모든 다른 파일에 이 이름이 나타난다.
의 정의가 .h
파일에 나타나면 kAnimationDuration
하나의
를 성명한 것과 같다static
.왜 상량의 작용역이 현재 클래스에만 있을 때, 우리는 첫 번째 방법으로 정의합니까?
(.m)
수식자는 이 상수가 정의 (object file)
에만 정의되어 있음을 의미하기 때문에 컴파일러가 컴파일러를 받을 때마다 한 부static
를 출력합니다. 이 상수가 추가되지 않음 (external symbol)
을 설명하면 컴파일러가 그것을 위해
를 만들 것입니다. 이때 다른 컴파일러도 같은 이름의 변수를 설명하면 컴파일러가 오류를 보고합니다.왜 상수의 작용역은 현재 클래스를 인용한 모든 코드에서
우리는 두 번째 방식으로 정의합니까? (global symbol table)
에 넣어야 한다. 이 상수의 정의는 헤더 파일
에 있다. 실현 파일
에 있다. 그러면 컴파일러가 이 상수를 사용할 때 정의를 볼 필요가 없다. 즉, 코드가 이 상수를 사용할 수 있도록 허용하는 것이다. 왜냐하면 이진 파일로 연결된 후에 이 상수를 찾을 수 있다는 것을 알고 있기 때문이다.Note:
이 사용#define
보다 낫다. #define
에 정의된 상수는 유형 정보를 포함하지 않기 때문에 컴파일러는 컴파일하기 전에 이것에 따라 찾기와 교체 작업을 수행할 뿐이다. 누군가가 상수 값을 다시 정의해도 컴파일러는 경고 정보를 주지 않기 때문에 프로그램의 상수 값이 일치하지 않는다이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.