목표 C에서 상수를 생성하는 가장 좋은 방법은 무엇입니까?
학습 목적으로 Reddit 클라이언트를 만들고 있습니다.상수가 들어 있는 파일이 필요해요.파일 Import를 생각하고 있습니다.Reddit-Prefix.pch
모든 파일에서 상수를 사용할 수 있도록 하려면 file을 선택합니다.그게 좋은 방법인가요?또, 조사를 실시해, 상수를 작성하는 몇개의 방법을 찾았습니다만, 어느 것을 사용할지 모르겠습니다.
#define
매크로const
static const
extern const
enum
그럼 어떤 방법이 선호되나요? 컨벤션이란 무엇입니까?'에 따라 다르다'는 것은 알지만, 보다 구체적으로 묻고 싶은 것은 다음과 같습니다.각 솔루션의 사용 사례는 무엇입니까?
또, 사용하는 경우extern const
파일을 Import해야 합니까?아니면 파일을 Import하지 않아도 글로벌하게 상수를 사용할 수 있습니다.
내가 논리적으로 결론지을 수 있는 것은 이다.enum
커스텀 에러 도메인과 같은 것을 정의하는 경우는, 최적인 선택입니다(실제로 제 말이 맞습니까).하지만 다른 사람들은요?
첫 번째 질문은 상수의 범위를 지정하는 것입니다.실제로 두 가지 질문입니다.
- 이러한 상수는 단일 클래스에 고유한 것입니까, 아니면 애플리케이션 전체에 걸쳐 있는 것이 의미가 있습니까?
- 클래스 고유의 경우 클래스 클라이언트에 의해 사용됩니까, 아니면 클래스 내에서만 사용됩니까?
단일 클래스에 고유하고 내부적인 경우 다음과 같이 선언합니다.static const
.m 파일의 맨 위에 다음과 같이 표시됩니다.
static NSString *const MyThingNotificationKey = @"MyThingNotificationKey";
단일 클래스에 속하지만 다른 클래스에서 공용/사용해야 하는 경우 다음과 같이 선언합니다.extern
.m에서 정의합니다.
//.h
extern NSString *const MyThingNotificationKey;
//.m
NSString *const MyThingNotificationKey = @"MyThingNotificationKey";
글로벌하게 할 필요가 있는 경우는, 그것들을 헤더로 선언해, 대응하는 모듈, 특히 이러한 상수에 대해 정의합니다.
원하는 글로벌 수준의 상수와 단순히 서로 속하지 않는 글로벌 상수에 대해 이러한 상수를 혼합하여 조합할 수 있습니다. 필요에 따라 각각 자체 헤더가 있는 개별 모듈에 배치할 수 있습니다.
그거 좋지#define
?
오래된 대답은 "매크로스에는 유형 정보가 없습니다."입니다. 하지만 오늘날의 컴파일러는 변수뿐만 아니라 리터럴(매크로가 확장되는 대상)에 대한 모든 유형 검사를 매우 스마트하게 수행합니다.
현대의 대답은 디버거가 매크로에 대해 알지 못하기 때문입니다.말할 수 없다[myThing addObserver:self forKey:MyThingNotificationKey]
로 "Debugger"가 "Debugger" 명령어일 경우, "Debugger" MyThingNotificationKey
을 사용하다디버거는 매크로가 변수인 경우에만 매크로에 대해 알 수 있습니다.
안 돼?enum
Rmaddy, Rmaddy, Rmaddy 。enum
을 사용법아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디, 아이디.
을 위해서, 「 」는 「 」를 참조해 주세요.enum
매우 좋기 때문에 꼭 사용해 주세요.(및 매크로를 사용하는 것이 좋습니다.)다른 것은 다른 것을 사용해야 합니다.enum
정수 이외에는 아무것도 하지 않습니다.
기타 질문
Reddit-Prefix.pch 파일에 있는 파일을 Import하여 모든 파일에 상수를 사용할 수 있도록 할 생각입니다.그게 좋은 방법인가요?
아마 해롭지는 않을 테지만, 아마도 과도할 거야.필요한 곳에 상수 헤더를 가져옵니다.
각 솔루션의 사용 사례는 무엇입니까?
#define
: 꽤 : : : : : : : : : 。솔직히 더 이상 상수에 이걸 사용할 타당한 이유가 있는지 모르겠어요.const
상수에 입니다. 로컬 상수에 최적입니다.하고 있는 , 이것을 .static const
고유 : 파일 고유(또는 클래스 고유) 상수에 최적입니다.extern const
: 헤더에 상수를 내보낼 때 사용해야 합니다.
「」를 사용하고 있는 는, 「」를 사용합니다.
extern const
★★★★★★★★★★★★★★★★★★★★★★★★★?아니면 파일을 Import하지 않아도 글로벌하게 상수를 사용할 수 있습니다.
파일을 사용하는 각 파일 또는 프리픽스 헤더 중 하나로 Import해야 합니다.
Foundation_export
을 검토해 주세요.FOUNDATION_EXPORT
이 extern
이는 Foundation에 정의되어 있으며 C, C++ 및 Win32와 호환되는 형식으로 컴파일되어 있기 때문입니다.
NSObjCRuntime.h에서 정의된 대로
#if defined(__cplusplus)
#define FOUNDATION_EXTERN extern "C"
#else
#define FOUNDATION_EXTERN extern
#endif
#if TARGET_OS_WIN32
#if defined(NSBUILDINGFOUNDATION)
#define FOUNDATION_EXPORT FOUNDATION_EXTERN __declspec(dllexport)
#else
#define FOUNDATION_EXPORT FOUNDATION_EXTERN __declspec(dllimport)
#endif
#define FOUNDATION_IMPORT FOUNDATION_EXTERN __declspec(dllimport)
#else
#define FOUNDATION_EXPORT FOUNDATION_EXTERN
#define FOUNDATION_IMPORT FOUNDATION_EXTERN
#endif
언급URL : https://stackoverflow.com/questions/17228334/what-is-the-best-way-to-create-constants-in-objective-c
'sourcecode' 카테고리의 다른 글
XAML 그리드에서 RowDefinition Height="10*"는 무엇을 의미합니까? (0) | 2023.04.09 |
---|---|
SELECT 쿼리 빈 결과에 대한 단순 확인 (0) | 2023.04.09 |
리스트 이해 python의 루프를 위해 2를 프레임하는 방법 (0) | 2023.04.09 |
Windows PowerShell에서 표준 입력/출력 리다이렉트 (0) | 2023.04.09 |
Bash를 사용하여 파일에 문자열이 있는지 테스트하려면 어떻게 해야 합니다. (0) | 2023.04.09 |