Object-C 베이스 - 속성 소개 및 사용

1764 단어 ios 개발
Object-c2.0은 속성의 개념을 도입하여 점의 방법을 통해 대상의 구성원 변수에 접근할 수 있도록 했다.가령 하나의 클래스가 A라고 가정하면 이 클래스는 하나의 구성원 대상이 mTest이고 mTest는 하나의 유형이 B인 대상이다. 현재 이미 A클래스의 실례 대상이 a이다. a.mTest와 같은 방식을 사용할 수 있도록 우리는 다음과 같은 두 가지를 해야 한다.
1. 헤더 파일에서 다음과 같은 방식으로 mTest를 속성으로 성명한다.
속성을 설명하는 문법: @property 형식 이름
예를 들어 우리는 이렇게 쓸 수 있다: @property(readwrite,nonatomic,retain) B *mTest;
이런 성명에서 가장 현혹되기 쉬운 것은 유형 부분이다. 사실 속성은 주로 세 가지로 나뉜다.
              1.읽기 및 쓰기 속성(readwrite/readonly)
기본값은readwrite로 이 속성은 읽을 수도 있고 이 속성 변수에 값을 부여할 수도 있음을 나타낸다.readonly는 이 속성 변수만 읽을 수 있음을 나타냅니다.
              2.원자 속성
원자 속성 중,atomic는 기본값으로 속성이 원자임을 나타내고 다중 스레드 병렬 접근(setter 실현에 동기화 자물쇠를 넣었음)을 지원한다. 후자는 비원자적이어서 비다중 스레드 환경에서 효율을 높이기에 적합하고 동기화 자물쇠를 넣지 않았다.
              3.Setter 속성(assign/retain/copy)
만약 속성이 대상 유형이라면,retain,assign,copy 파라미터를 사용하여 setter 방법이 내부에서 실현될 때 대상을 가지고 있는 방식을 표시해야 합니다.그 중에서retain은 인용 계수를 증가시키고 강력한 인용 형식입니다.assign은 변수의 직접적인 값이고 약한 인용 형식이며 기본값입니다.copy는 setter의 매개 변수를 복사해서 구성원에게 변수를 부여하는 것입니다.만약 당신이 대상을 가지고 있는 방식을 제시하지 않는다면 컴파일러는 경고를 줄 것이다.
속성의setter 유형은 메모리 관리와 밀접한 관계를 가지기 때문에 상당히 신중하게 사용해야 한다. 많은 메모리 오류와 프로그램의 엉뚱한 붕괴는 속성에 대한 부정확한 사용으로 인한 것이다.
2. 있다.m 파일에서 다음과 같은 방식으로 대응하는 속성 읽기와 설정 함수를 합성합니다
              @synthesize mTest;
              .m 파일에 위의 줄이 있으면 컴파일러는 자동으로 Getter 함수를 합성합니다. 만약 속성이 값을 부여할 수 있는 (즉 속성 형식은readwrite) 이라면 setter 함수도 합성합니다.컴파일러가 합성한 Getter 함수 이름은 속성 이름과 같고 합성된 setter 함수 이름은 setMTEst와 같다.
실제로 우리는 컴파일러를 사용하지 않고 합성 방법을 도와주고 속성의 접근 방법을 스스로 실현할 수 있다.이렇게 하려면 @synthesize mTest를동시에m 파일에는 다음 두 함수가 있습니다.
 
- (B *) mTest
{
     // .......
}

- void setMTest:(B*) b
{
     // .............
}

스스로 액세스 방법을 실현하는 것은 속성의 초심에 어긋나는 것이다. 일반적으로 사용하지 않는다. 여러분에게 이것은 단지 문제를 설명하기 위한 것일 뿐이다.

좋은 웹페이지 즐겨찾기