제6조'속성'개념

2396 단어

속성 개념 이해


속성(property)은 객체의 데이터를 캡슐화하는 데 사용되는 Objective-C의 특성입니다.OC 대상은 일반적으로 필요한 데이터를 각종 실례 변수로 저장하고 실례 변수는 일반적으로 '접근 방법' 을 통해 접근한다.'속성'이라는 특성은 OC의 일부가 되었고 개발자는 컴파일러로 하여금 속성과 관련된 접근 방법을 자동으로 작성하게 할 수 있다.이 특성은 점 구문을 도입합니다.

문제의 출처


개인 정보의 클래스에 인민, 생일, 주소 등 내용을 저장할 수도 있고, 클래스 인터페이스의public 구간에 실례 변수를 설명할 수 있다.
@interface EOCPerson : NSobject
@public
    NSString *_firstName;
    NSString *_lastName;
@private
    NSString *_someInternalData;
@end

이런 쓰기 방법에서는 실례 변수의 역할 영역을 정의할 수 있지만, Objective-C 코드를 작성하는 것은 매우 드물다.이런 쓰기 방법의 문제는 대상의 배치가 컴파일링 기간에 이미 고정되었다는 것이다.닿기만 하면firstName 변수의 코드를 컴파일러가 '편이량' 으로 바꿉니다.이 오프셋은 '하드 인코딩' 으로 이 변수가 저장 대상의 메모리 영역의 시작 위치에서 얼마나 멀리 떨어져 있는지 표시합니다.실례 변수가 하나 더 들어가면예를 들어, firstName 앞에 를 추가합니다.
@interface EOCPerson : NSobject
@public
    NSDate *_dateOfBirth;
    NSString *_firstName;
    NSString *_lastName;
@private
    NSString *_someInternalData;
@end

원래 표현firstName의 오프셋은 을 가리킵니다.dateOfBirth입니다. 오프셋 하드코딩과 그 코드들은 잘못된 값을 읽을 수 있습니다.만약 코드가 컴파일기에서 계산한 편이량을 사용한다면, 클래스 정의를 수정한 후에 다시 컴파일해야 한다. 그렇지 않으면 오류가 발생할 것이다.OC의 방법은 실례 변수를 저장 편이량에 사용되는'특수 변수'로 삼아'클래스 대상'에 보관하는 것이다.편향량은 운행 기간에 찾을 것입니다. 클래스의 정의가 바뀌면 저장된 편향량도 바뀝니다. 그러면 언제든지 실례 변수에 접근할 수 있습니다.항상 정확한 오프셋을 사용할 수 있습니다.실행 기간 클래스에 인스턴스 변수를 추가할 수도 있는데 이것이 바로 확고한'애플리케이션 바이너리 인터페이스'(Application Binary Interface, ABI)다.ABI는 많은 내용을 정의했는데 그 중 하나는 코드를 생성하는 것이 지켜야 할 규범이다. 이런'튼튼한'ABI가 있으면 우리는'class-continuation 분류'나 실현 파일에서 실례 변수를 정의할 수 있다.따라서 반드시 인터페이스에서 모든 실례 변수를 성명하지 않고 일부 변수를 인터페이스의public 구간에서 옮겨서 클래스 실현과 관련된 내부 정보를 보호할 수 있다.이 문제의 또 다른 해결 방법은 가능한 한 실례 변수에 직접 접근하지 말고 액세스 방법을 통해 해야 한다는 것이다. 비록 속성은 최종적으로 실례 변수를 통해 실현되어야 하지만 간결한 추상적인 메커니즘을 제공하여 액세스 방법을 직접 작성할 수 있다. 그러나 정규적인 OC 인코딩 스타일에서 액세스 방법은 엄격한 규정을 가지고 있다.바로 이런 엄격한 명칭 규범이 있기 때문에 OC는 명칭에 따라 자동으로 접근 방법을 만들 수 있다.이 때 Property 문법은 쓸모가 있을 것이다.

속성 특성


원자성
기본적으로 컴파일러가 합성하는 방법은 잠금 메커니즘을 통해 원자성을 확보한다.만약 속성이 nonatomic 특질을 갖추고 있다면 동기화 자물쇠를 사용하지 않습니다.비록'atomic'이라는 특질이 없지만(어떤 속성이nonatomic 특질을 갖추지 못하면 그것이 원자(atomic)이라는 특질은 여전히 속성 특질에 이 점을 명확하게 쓸 수 있음을 주의하십시오.컴파일러는 오류를 보고하지 않습니다.액세스 방법을 스스로 정의한다면 속성 특질과 일치하는 원자성을 따라야 한다.
읽기/쓰기 권한
readwrite 특질을 가진 속성은 Getter와setter 방법을 가지고 있으며, 이 속성이 @synthesize로 이루어지면 컴파일러에서 이 두 가지 방법을 자동으로 생성합니다.
readonly 특질을 가진 속성은 Getter 방법만 있습니다.

좋은 웹페이지 즐겨찾기