답변:
이 @문자는 C 또는 C ++ 식별자에서 사용되지 않으므로 다른 언어의 키워드와 충돌하지 않는 방식으로 Objective-C 언어 키워드를 도입하는 데 사용됩니다. 이를 통해 언어의 "객관적인"부분이 C 또는 C ++ 부분과 자유롭게 혼합 될 수 있습니다.
따라서 @일부 Objective-C 코드에서 볼 때마다 예외가 거의 없지만 C 또는 C ++ 구문이 아닌 Objective-C 구문을보고있는 것입니다.
주요 예외는 id, Class, nil,와 Nil, 일반적으로 언어 키워드로 취급하는 그들은 또한이 경우에도 typedef또는 #define그들 뒤에 있습니다. 예를 들어, 컴파일러는 실제로 id선언에 적용되는 포인터 유형 변환 규칙 및 GC 쓰기 장벽 생성 여부 결정과 관련하여 특별히 처리 합니다.
다른 예외 in, out, inout, oneway, byref, 그리고 bycopy; 분산 된 객체를보다 효율적으로 만들기 위해 메소드 매개 변수 및 리턴 유형에 대한 스토리지 클래스 주석으로 사용됩니다. (그들은 DO가 최선의 방법 직렬화에 거래를 결정하기에 볼 수 있습니다 런타임에서 사용할 수있는 방법 서명의 일부가됩니다.) 내 속성도있다 @property선언, copy, retain, assign, readonly, readwrite, nonatomic, getter, 그리고 setter; 그것들은 @property선언 의 속성 섹션 내에서만 유효합니다 .
@.
@문자는 C에서 사용되지 않았기 때문에 기존 구문과 100 % 호환성을 유지하는 대체 구문 분석에 편리한 "탈출 해치"였습니다.
에서 에서 @ 기호 : 오브젝티브 C 튜토리얼 , 그것은 다양한 키워드의 전면에 이유 :
@를 사용하면 Objective-C 컴파일러를 기존 C 컴파일러에 쉽게 연결할 수 있습니다. @는 문자열 리터럴을 제외한 C의 컨텍스트에서 유효하지 않기 때문에 토크 나이저 (컴파일러의 초기 단계 및 간단한 단계)는 문자열 상수 외부에서 @ 문자를 찾기 위해 간단하게 수정할 수 있습니다 (토큰자는 문자열 리터럴을 이해합니다) 따라서 이것을 구별 할 수있는 위치에 있습니다). @가 나오면 토크 나이 저는 나머지 컴파일러를 "Objective-C 모드"로 설정합니다. Objective-C 구문 분석기는 Objective-C 코드의 끝을 감지하면 컴파일러를 일반 C 모드로 다시 되 돌리는 역할을합니다.
또한 문자열 리터럴 앞에서 볼 때 C에서 'char *'가 아닌 NSString을 만듭니다.
에서 Macrumors : 오브젝티브 C 튜토리얼 , 때 문자열 리터럴 앞에 :
@ ""NSString 리터럴도 있습니다. 기본적으로 NSString의 + stringWithUTF8String 메서드의 약어입니다.
@는 또한 C 문자열에 유니 코드 지원을 추가합니다.
로부터 수동 :
Objective-C 프레임 워크는 일반적으로 C 스타일 문자열을 사용하지 않습니다. 대신, 문자열을 NSString 객체로 전달합니다.
NSString 클래스는 임의 길이의 문자열 저장을위한 내장 메모리 관리, 유니 코드 지원, printf 스타일 형식화 유틸리티 등을 비롯하여 기대할 수있는 모든 장점이있는 문자열에 대한 객체 래퍼를 제공합니다. 이러한 문자열은 일반적으로 사용되므로 Objective-C는 상수 값에서 NSString 객체를 생성하기위한 간단한 표기법을 제공합니다. 이 속기를 사용하려면 다음 예제와 같이 일반적인 큰 따옴표 붙은 문자열 앞에 @ 기호를 붙이기 만하면됩니다.
NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
@사용 되는지의 한 예일뿐입니다 . 나는 다음과 같은 코드를보고있다 : mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),... NSString 과 관련이 없음