2015-02-04 2 views
2

나를 괴롭히는 것은 'literal'이라는 용어가 NSStringNSArray과 같은 클래스의 인스턴스를 나타내는 데 사용되는 이유입니다. 나는 용어가 NSString과 관련하여 사용 된 것을 보았고 순진하다는 것은 인용 부호 사이에 '문자 그대로'문자열과 관련이 있다고 생각했습니다. 죄송합니다. 한심한 소리가 들리지만, 어떻게 생각하고 있었는지.'리터럴'이라고하는 '리터럴 구문'을 사용하여 인스턴스가 생성되는 이유는 무엇입니까?

오늘 나는 NSArray의 특정 인스턴스를 리터럴 인스턴스, 즉 '리터럴 구문'을 사용하여 만든 클래스의 인스턴스라고도 부를 수 있음을 알게되었습니다.

+3

리터럴 = 컴파일 타임에 코드에 하드 코딩 됨. E. g .:'@ [@ "foo", @ "bar"]'는 배열 리터럴입니다. 런타임시 동적으로 얻은 것과 비교해보십시오 (예 : 일부 JSON 구문 분석 결과) –

답변

2

같은 생성자 메서드로 만든 하나의 반대로이 배열의 작성 아웃 표현입니다 . 그들은 생각보다 넓습니다. 리터럴은 실제 값이 소스에서 인코딩됨을 의미합니다. 따라서 ObjC에는 몇 가지 리터럴 구문이 있습니다.INT

  • 1.0 - - 더블
  • 1.0f - 떠
  • "a" - C - 문자열
  • @"a" -는 NSString
  • @[] - NSArray를가
  • ^{} - 기능

    • 1 : 예를 들어,

    그래, 블록은 단지 함수 리터럴입니다. 기호 이름 (변수 또는 상수 등)에 지정할 수있는 익명 값입니다.

    일반적으로 리터럴은 텍스트 세그먼트에 저장 될 수 있으며 컴파일 타임에 계산됩니다 (런타임이 아닌). 올바르게 기억하면 배열 리터럴은 현재 해당 코드로 확장되고 런타임에 평가되지만 @"..." 문자열 리터럴은 정적 데이터로 이진 코드로 인코딩됩니다 (적어도 현재는 실제 함수를 인코딩하는 데 사용 된 gcc의 비 Apple 버전 임). 내가 기억하는 정적 문자열을 생성하기 위해 호출).

  • +0

    예,'@ [...]'는'arrayWithObjects : count :'이며, 이것이 이유입니다 파일의 최상위 레벨에서 NSString을 제외한 리터럴을 사용하지 마십시오. –

    +0

    정말요? 블록은 함수 리터럴입니까? 나는 C 언어가 어떤 종류의 폐쇄도되지 않기 때문에 언어 수준에서 근본적으로 다르다고 생각했다. – Linuxios

    +0

    C 함수는 일종의 클로저입니다. 현재 정의되어있는 어휘 범위를 닫습니다. 따라서 블록과 마찬가지로 현재 파일 (함수 자체 외부)에 정의 된 변수가 닫힙니다. 블록은 C의 함수와 밀접한 관련이 있습니다. 저는 포인터가 어떤 종류의 클로저가 아니라는 것을 의미한다고 생각합니다. –

    2

    리터럴 구문 또는 리터럴은 개체 작성을위한 일반 구문을 사용하는 대신 언어로 작성된 전용 구문을 사용하여 만든 개체입니다 (그 무엇이든). 이다

    NSArray* a = @[@"Hello", @"World"]; 
    

    , 이에 상응하는 모든 의도와 목적을 위해 : 여기

    나는 문자 그대로의 배열을 만들

    NSArray* a = [NSArray arrayWithObjects:@"Hello", @"World", nil]; 
    

    @[] 구문에 내장되어 있기 때문에 문자 그대로 처음 호출 @"..." 구문이 NSString을 만들 때 내장 된 것과 같은 방식으로 배열을 만드는 언어입니다.

    1

    용어 '문자'는 정말 인스턴스를 참조 아니에요 클래스

    의 인스턴스를 참조하는 데 사용됩니다;

    는 "문자"부분은 바로 특수 구문 @[@1, @2]입니다
    NSArray * thisWasCreatedWithALiteral = @[@1, @2]; 
    NSArray * butWhoCares = thisWasCreatedWithALiteral; 
    

    는 [S] 뭔가 할 헥타르 : 객체를 만든 후,이 생성 된 방법은 중요하지 않습니다 '문자 그대로'문자열로, 즉 인용 부호 사이에 있습니다.

    정확히 맞아 : @Linuxios 노트, 문자 그대로의 구문은 언어에 내장됨에 따라 arrayWithObjects:

    관련 문제