Apple의 개인 헤더 파일에서 밑줄을 제공하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1829755

  •  11-09-2019
  •  | 
  •  

문제

나는 Apple의 많은 .H (개인 API)를 보았다. 변수 / 구조 / 열거 / 클래스의 대부분은 _가 접두사로됩니다.

#import <Foundation/NSValue.h>
#import <Foundation/NSObjCRuntime.h>

@class NSString;

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

내 질문은

밑줄을 밑줄을주고 다시 타이핑하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

Objective-C에는 전 세계적으로 개방 된 공간이 있습니다. 모든 이름이 독특해야합니다. Apple은 이전에 주어진 이유 외에도 모든 지지대 이름을 보유합니다. 이것은 우발적 인 이름 충돌을 방지하는 데 도움이됩니다.

다른 팁

일반적으로 해당 엔터티가 개인 및/또는 내부이며 코드에 직접 사용해서는 안됩니다. 나는 이전 버전의 C에서 익명 구조를 선언 할 수 없으므로 "필러"이름이 필요하다고 생각합니다.

나는 그것이 창조하기 위해 믿는다 고 믿는다 불투명 한 유형. 이는 제공된 인터페이스를 사용하지 않고 내부 세부 사항에 액세스하는 데 유형의 클라이언트가 제한됩니다. 그런 다음 An을 통해 구조물을 사용할 수 있습니다 불투명 포인터, Apple이 그러한 유형 뒤에 코드를 변경하기로 결정하면 소프트웨어를 다시 컴파일 할 필요가 없도록 내부 구현에 대해 걱정하지 않고 유형의 배열, 변수 등을 선언 할 수 있습니다.

구조를 선언하기 위해 선언 스타일 typedef struct _name {...} name 위에서 언급했듯이 GCC 2.0 정도로 돌아갑니다. 익명 구조물을 가질 수 없었습니다.

Ivars의 이름의 경우 단일 선두 밑줄은 Apple 내부 코딩 컨벤션이며 공식적으로 Apple은 단일 밑줄로 시작하는 모든 이름을 매출시킵니다. Apple이 모든 Ivars를 그런 식으로 지명하면, 당신은 당신이 그것을하지 않으면 그들의 이름과 충돌하지 않을 것입니다.

불행히도, 많은 샘플 코드 프로젝트는 코드를 거치지 않고 IVAR 이름의 주요 밑줄을 제거하지 않고 Apple의 개발자 웹 사이트에 게시되었습니다. 이것은 두 가지 이유가 발생합니다. Apple 내부에서 일하는 개발자가 변수를 그 방식으로 명명하는 습관이 있다는 주요 이유는 다른 이유는 샘플 코드 프로젝트를 검토하는 사람들이 표준 코딩을 시행하는 데 실제로 관심이 없었기 때문입니다. 스타일.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top