고 품질 iOS 와 OS X 코드 를 작성 하 는 52 가지 효과 적 인 방법 학습 노트(1)

제1장 Objective-C 익히 기
1.Objective-C 언어의 기원 알 아 보기
OC 는 C++,자바 등 대상 언어 와 유사 하지만 여러 가지 차이 가 있다.OC 가 사용 하 는'메시지 구조'(messaging structure)는'함수 호출'(function calling)이 아니 라'메시지 구조'(messaging structure)를 사용 하기 때문이다.Objective-C 언어 는 Smalltalk 이 진화 되 었 고 후 자 는 메시지 유형 언어의 원조 이다.메시지 구조 와 함수 호출 의 차 이 는 메시지 구조의 언어 를 사용 하고 실행 할 때 실행 되 는 코드 는 실행 환경 에 의 해 결정 된다 는 것 이다.함수 호출 언어 를 사용 하면 컴 파일 러 가 결정 합 니 다.
  • 함수 호출 에 있어 서 호출 된 함수 식 다 중 경우 실행 할 때'가상 방법 표'(virtual table)에 따라 어떤 함 수 를 실행 해 야 하 는 지 찾 아야 합 니 다.메시지 구 조 는 다 중 여부 와 상 관 없 이 실행 할 때 실행 방법 을 찾 을 수 있다.실제로 컴 파일 러 는 메 시 지 를 받 는 대상 이 어떤 유형 인지 에 도 관심 이 없다.메 시 지 를 받 는 대상 문제 도 실행 중 에 처 리 됩 니 다.이 과정 을'동적 바 인 딩'(dynamic binding)이 라 고 합 니 다.
  • Objective-C 의 중요 한 작업 은 컴 파일 러 가 아 닌'런 타임 구성 요소'(runtime component)로 이 루어 집 니 다.OC 의 대상 지향 특성 에 필요 한 모든 데이터 구조 와 함 수 는 실행 기 구성 요소 에 있 습 니 다.예 를 들 어 운행 기 구성 요소 에는 모든 메모리 관리 방법 이 포함 되 어 있다.본질 적 으로 코드 와 연 결 된'동적 라 이브 러 리'(dynamic library)입 니 다.그러면'실행 기 구성 요소'만 업데이트 하면 프로그램의 성능 을 향상 시 킬 수 있 고 함수 식 언어 는 다시 컴 파일 해 야 합 니 다.
  • OC 는 C 언어의'초 집합'(superset)이기 때문에 C 언어 로 작 성 된 기능 은 OC 에서 여전히 적용 된다.C 언어의 메모리 모델(memory model)을 이해 하 는 것 은'참조 계수'(reference counting)메커니즘 의 원 리 를 이해 하 는 데 도움 이 된다.
  • // OC         ,                :
    
        NSString *someString = @"The String"
            
    //            ”   “(heap space) ,      ” “(stack) 。       OC  :  
    
        NSString *stackString;
    
    // error:interface type cannot be statically allocated
    
    //     someString           ,                ,       ,             。
        
        NSString *someString = @"The String";
        NSString *anotherString = someString;
    //           ,      NSString *  ,       ,      (32   4  ,64   8  )。
           
    
  • 더미 에 분 배 된 메모 리 는 직접 관리 해 야 합 니 다.창고 에 분 배 된 변 수 를 저장 하 는 메모 리 는 창고 프레임 이 꺼 질 때 자동 으로 청 소 됩 니 다.OC 는 메모리 관 리 를 추상 화 합 니 다.malloc 와 free 가 대상 이 차지 하 는 메모 리 를 분배 하거나 방출 할 필요 가 없습니다.즉,'참조 계수'
  • 입 니 다.
  • 일 부 는 int,float,double,char 등'비 대상 유형'(nonobject type)을 저장 하면 구조 체 를 사용 하면 된다.대상 에 비해 메모리 성능 을 관리 해 야 합 니 다.

  • Objective-C 와 Runtime 참고:왜 그래 요?
    2.클래스 의 헤더 파일 에서 다른 헤더 파일 을 최대한 적 게 인용 합 니 다.
  • OC 에서 도'헤더 파일'(header file)과'구현 파일'(implementation file)을 사용 하여 코드 를 구분 합 니 다.OC 언어 로'클래스'를 작성 하 는 기준 은 클래스 이름 으로 파일 이름 을 만 들 고'h 와 m 파일'을 만 드 는 것 입 니 다.흔히 실제 응용 에서 우 리 는 모델 1 류 헤더 파일 에 다른 모델 2 를 포함 하 는데 이때 우 리 는 보통 import "Model2.h" 이라는 방법 이 가능 하지만 우아 하지 않다.여기 컴 파일 러 는 model 2 를 사용 하지만 model 2 의 모든 세부 사항 을 알 필요 가 없습니다.model 2 가 존재 하 는 것 만 알 면 됩 니 다.이곳 에서 우 리 는 class Model2 을 채택 할 수 있다.이것 은 앞으로 성명(forward declaring)이 라 고 합 니 다.그러나 실현 파일 에서 모델 2 의 모든 세부 사항 인 import "Model2.h" 을 알 아야 한다.
  • 은 헤더 파일 을 인용 하 는 시 기 를 뒤로 미 루 고 필요 할 때 만 도입 하면 클래스 의 사용자 가 헤더 파일 을 도입 하 는 수량 을 줄 일 수 있다.두 개의 헤더 파일 중 각각 import 의 다른 파일 은 중복 인용 을 초래 할 수 있다. AB :A import B、B import A A B, B A 이지 만 실현 문서 에 서 는 이런 일이 없 을 것 이다.

  • 앞으로 성명 을 사용 하면 클래스 간 의 결합 을 낮 출 수 있 습 니 다.예 를 들 어 특정한 클래스 가 프로 토 콜 을 따 르 는 것 을 설명 할 수 없습니다.이 때 는'프로 토 콜'성명 을 따라'class-continuation 분류'로 이동 합 니 다.그렇지 않 으 면 프로 토 콜 을 하나의 헤더 파일 에 단독으로 넣 고 도입 합 니 다.
    3.글자 로 문법 을 재 고 그 와 등가 하 는 방법 을 적 게 쓴다.
  • 은 문자열 NSString,수치 NSNumber,배열 NSArray,사전 NSDictionary 를 만 들 기 위해'글자 크기'(literal)문법 을 사용 해 야 합 니 다.이러한 대상 을 만 드 는 일반적인 방법 보다'글자 양 문법'(literal syntax)을 사용 하여 코드 길 이 를 줄 이 고 읽 기 쉽다.
  • 정수,부동 소수점,불 값 저장 대상 에서 NSNumber 류 를 사용 할 수 있 습 니 다.
  • NSNumber *doubleNumber = @3.14159;
    NSNumber *boolNumber = @YES;
    NSNumber *charNumber = @'a';
    NSNumber *intNumber = @2;
    NSNumber *floatNumber = @2.6f;
    
    //        
    NSNumber *x = @2;
    NSNumber *y = @2.6f;
    NSNumber *expressionNumber = @(x * y);
    

    정상 생 성 배열:NSArray *animals = [NSArray arrayWithObjects:@"dog",@"cat",@"mouse",nil]; 정상 추출 요소 NSString *dog = [animals objectAtIndex:0]; 자 면 량 생 성 NSArray *animals = @[@"dog",@"cat",@"mouse"]; 자 면 량 획득 요소 NSString *dog = animals[0]; 주의:자 면 량 생 성 배열 이나 사전 시 값 에 nil 이 있 으 면 이상 을 던 집 니 다.
  • 한계 성:문자열 을 제외 하고 만 든 대상 은 모두 Foundation 프레임 워 크 이 고 글자 의 양 이 만 든 배열,사전,문자열 은 모두 가 변 할 수 없 는 것 입 니 다.가 변 하려 면 mutableCopy
  • 이 필요 합 니 다.
    4.다 용도 상수,적 게 사용\#define 예비 처리 명령#define ANIMATION_DURATION 0.3 예비 처 리 는 만 나 는 모든 ANIMATION_DURATION 을 0.3 으로 바 꾸 고 이 예비 처 리 는 데이터 형식 을 규범화 시 키 지 않 습 니 다.static const NSTimeInterval kAnimationDuration = 0.3 static 수식 자 는 이 변 수 는 정 의 된 차 변수의 컴 파일 단원 에서 만 볼 수 있 음 을 의미한다
    미 완성 계속...

    좋은 웹페이지 즐겨찾기