권장 4: iOS는 동등한 방법이 아닌 객체 글꼴 구문을 우선적으로 사용하는 것이 좋습니다.

3896 단어
다른 프로그래밍 언어에서 Objective-C로 막 넘어간 많은 프로그래머들은 긴 함수 이름을 보면 붕괴를 느낀다. 이런 문법은 메시지의 전달을 영어 문장처럼 만들어 부족하지만 가독성을 크게 향상시켰다.예를 들어 부동점수를 초기화하려면 이렇게 써야 한다.
NSNumber * value = [NSNumber numberWithFloat:123.45f];

이 문장에서 코드의 의미를 명확하게 알 수 있지만, 간단한 부치문조차도 이렇게 처리해야 하는가?대상의 글씨체는 iOS 프로그래머가 더욱 효율적으로 코드를 작성하는 데 도움을 줄 수 있다.Xcode 4.4 버전에서는 이 기능을 사용할 수 있습니다.
대상의 서면량 어순에 대한 편리한 정의 숫자, 수조, 사전 대상이 기능은 Java 5에서 제공하는 auto boxing 기능과 유사합니다.이것은 문법 개선이지만 코드를 쓰는 효율을 높이는 데 큰 도움이 된다.애플의 이번 새로운 특성은 절충 처리 방식을 채택하고 기초 유형에 맞게 간략하게 써서 문법의 간소화를 실현했다.간소화한 후에 문법 차원에서 간소화된 OC는 파이톤과 루비 등 동적 언어의 문법과 더욱 비슷하다는 것을 발견할 수 있다.
NSNumber * number = @1;
NSArray * array = @[@"one",@"two"];
NSDictionary * dict = @{@"key1": @"value1",@"key2",@"value2",@"key3",@"value3"};

다음은 하나하나 소개한다.숫자(NSNumber)의 간단한 쓰기
NSNumber * value;
value = @12345;
value = @123.45f;
value = @123.45;
value = @YES;

포장 표현식은 다음과 같은 방식으로 작성할 수도 있습니다.
NSNumber * piOverSixteen = @(M_PI / 16);
NSString * path = @(getenv("PATH"));

문자열 표현식에 있어서 주의해야 할 것은 표현식의 값이 반드시 NULL이어야 하며, 그렇지 않으면 이상이 발생할 수 있다는 것이다.
2. 수조(NSArray)는 NSArray의 초기화에 있어 매우 많은 문법이 있는데 여기서 일일이 나열하지 않고 새로운 문법을 직접 본다.
NSArray * array;
array = @[];// 
array = @ [ a ];// 
array = @[a,b,c];// 

아주 간단합니다. 여러 대상을 초기화하는 그룹을 더 이상 기억할 필요가 없을 때, 뒤에는 nil을 따라야 합니다.선자는 여러 개의 대상이 있는 그룹을 볼 때 컴파일러가 어떻게 처리하는지 보여 준다.
array = @[a,b,c];

컴파일러가 생성한 코드:
id  objects[] = {a,b,c};
NSUInterger count = sizeof(objects) /sizeof(id);
array = [NSArray arrayWithObjects:objects count:count];

컴파일러는 간단하게 반복되는 작업을 모두 했지만 주의해야 할 것이 하나 있다. 만약에 a, b, c 대상이nil이 있을 때 이상을 던질 수 있다는 점은 원래의 처리 방식과 맞지 않기 때문에 인코딩할 때 더욱 조심해야 한다.
3. 사전(NSDictionary)도 마찬가지로 사전이라는 데이터 구조에 있어 초기화 방식은 여러 가지가 있는데 새로운 쓰기 방법을 볼 수 있다.
NSDictionary * dict;
dict = @{};
dict = @{ k1 : o1};
dict = @{k1:o1,k2:o2,k3:o3};

4. 하표법과 용기류 용기의 문법이 간소화되어 하표의 방식으로 수조와 사전의 데이터를 저장할 수 있다.예를 들어 배열의 경우
NSArray * array = @[a,b,c];

다음과 같이 쓸 수 있습니다.
id obj = array[i];
array[i] = newObj;

사전의 경우:
id obj = dict[k2];
dic[k2] = newObj;

또한 사용자 정의 용기류는 규정된 하표 방법만 실현하면 하표 방식으로 데이터에 접근할 수 있다.실현할 방법은 다음과 같다.배열 유형의 아래 첨자 방법:
- (elementType)objectAtIndexedSubscript:(indexType)idx;
- (void)setObject:(elementType)object atIndexedSubscript:(indexType)idx;

사전 유형에 대한 아래 첨자 방법:
- (elementType)objectForKeyedSubscript:(keyType)key;
- (void)setObject:(elementType)object forKeyedSubscript:(keyType)key;

여기서 주의해야 할 것은 indexType은 정수이고 요소Type과 키Type은 대상 바늘이어야 한다는 것이다.5. 컨테이너 클래스 데이터 구조 변환 제한은 위의 표기법으로 구축된 컨테이너 클래스는 모두 변할 수 없으며 변할 수 있는 컨테이너를 생성하려면 -mutable Copy 메시지를 전달할 수 있습니다.예를 들면 다음과 같습니다.
NSMutableArray * mutablePlanets = [@[@"Mercury",@"Venus",@"Earth",@"Mars",@"Jupiter",@"Saturn",@"Uranus",@"Neptune"]mutableCopy];

상수 그룹에 직접 값을 부여할 수 없습니다. 해결 방법은 클래스 방법(void)initialize에서 값을 부여하는 것입니다.다음과 같습니다.
@implementation MyClass
static NSArray * thePlanets;
+ (void)initialize {
    if (self == [MyClass class]) {
         thePlanets =    @[@""Mercury",@"Venus",@"Earth",@"Mars",@"Jupiter",@"Saturn",@"Uranus",@"Neptune""];
    }  
}}

포인트 ###


(1) 문자열, 숫자, 그룹, 사전 등을 최대한 글자 크기 문법으로 만들고, 이전의 일반적인 대상 만들기 방법보다 간소화하며, 흔히 볼 수 있는 함정을 피할 수 있다.(2) 대상의 서면량 문법 특성은 완전히 아래로 호환되고 새로운 특성으로 작성된 코드로 컴파일된 이진 프로그램은 이전에 보낸 모든 OS에서 실행할 수 있다.(3) 숫자와 사전에서 키워드와 인덱스를 밑표로 삼아 데이터를 얻는다.(4) 대상의 글씨체 문법을 사용할 때 용기류는nil이 아니며, 그렇지 않으면 실행할 때 이상이 발생합니다.

좋은 웹페이지 즐겨찾기