소담 @property의 특질

3267 단어
OC에 익숙한 파트너들은 property(속성)를 자주 사용한다. 속성은 OC 언어의 특성이고 주요 역할은 대상의 데이터를 봉인하는 것이다. OC 대상은 일반적으로 필요한 데이터를 각종 실례 변수로 저장한다.실례 변수는 일반적으로 접근 방법 (access method) 을 통해 접근합니다.속성을 사용할 때 또 다른 문제는 주의해야 한다. 바로 속성 뒤에 자주 (attribute)를 덧붙이기 때문에 모든 특질의 작용을 잘 구분하는 것이 필요하다.예를 들어 다음 코드에는 세 가지 특성이 있습니다.
@property (nonatomic, copy, readonly) NSString * aString;

속성의 특성은 주로 다음과 같은 네 가지로 나뉜다.


1. 원자성


기본적으로 컴파일러가 합성하는 방법은 잠금 메커니즘을 통해 원자성을 확보한다.만약 속성이 nonatomic특질을 갖추고 있다면 동기화 자물쇠를 사용할 필요가 없다.nonatomic와 대응하는 것은atomic이다.주의: atomic 라고 명명된 특질이 없지만, 속성의 특질에 atomic 쓸 수 있는 성명을 던져도 컴파일러가 틀리지 않습니다.만약 자신이 속성의 접근 방법을 정의한다면 속성의 특질에 따라야 한다.atomic특질을 갖춘 속성 획득 방법은 잠금 메커니즘을 통해 조작의 원자성을 확보한다.즉, 두 라인이 같은 속성을 읽고 쓰면 언제든지 유효한 속성 값을 얻을 수 있다는 것이다.만약nonatomic특질(잠금하지 않음)의 속성이 있다면 그 중의 한 라인이 값을 바꿀 때 다른 라인도 갑자기 침입하여 수정되지 않은 속성 값을 읽을 수 있습니다. 이런 상황에서 읽은 값은 잘못된 것일 수 있습니다.그러나 atomic 특질은 시스템의 에너지 소모가 비교적 크고 속성은 자주 사용nonatomic이며 기본적인 특질이기도 하다.

2. 읽기/쓰기 권한

  • 읽기&쓰기:readwrite 특질을 갖춘 속성은 (getter) (setter), 속성이 @synthesize로 이루어지면 컴파일러가 자동으로 이 두 가지 방법을 생성한다(Xcode에서는 보이지 않지만 직접 사용할 수 있다)
  • 독해:readonly특질을 가진 속성은 (getter)만 가지고 @synthesize에서 속성이 실현될 때만 컴파일러가 합성하여 얻을 수 있습니다.

  • 3. 메모리 관리


    속성은 데이터를 봉인하는 데 사용되며 데이터는 (concrete ownership semantic)가 필요합니다. 다음은 속성에 영향을 줄 수 있습니다 (setter).
  • assign 은'순수량 유형·(예를 들어 NSInteger, CGFloat, int 등)에 대한 조작만 수행할 수 있다.
  • strong 이 특성은 속성이 하나를 정의했음을 나타낸다 (owning relationship).이 속성에 새 값을 설정할 때, 설정 방법은 먼저 새 값을 보존하고, 낡은 값을 방출한 다음에 새 값을 부여합니다.
  •     - (void)setName:(NSString *)newName {
            NSString *tmp = newName;
            [_oldName release];
            _oldName = tmp;
        }
    
  • weak의 이 특징은 속성이 하나를 정의했음을 나타낸다 (nonowning relationship).이 속성에 새 값을 설정할 때, 설정 방법은 새 값도 남기지 않고 낡은 값도 놓지 않습니다.이 특징은 assign와 유사하지만 속성에 대응하는 대상이 방출될 때 속성의 값은 nil로 설정됩니다.
  • unsafe_이 특질의 정의는 assign특질과 같지만 다른 것은 (object type)에 적용된다는 것이다. 이 특질은 (unretained)를 나타낸다. 가리키는 대상이 방출될 때 속성은 자동으로 nil(안전하지 않은 unsafe)로 설정되지 않는다는 점은 weak와 구분된다.
  • copy라는 특질이 나타내는 소속 관계는strong와 유사하며, 다른 것은 새 값을 보류하지 않고 새 값을 복사(copy)하는 것이다.속성 유형은 NSString일 때 이 특징을 자주 사용하여 봉인성을 보호한다. 설정 방법에 전달된 새로운 값은 NSMutableString류의 실례를 가리킬 수 있기 때문에 문자열을 복사하지 않으면 속성을 설정한 후에 문자열의 값은 대상이 알지 못하는 상황에서 수정될 수 있다.따라서 대상의 값이 무심코 변동되지 않도록 하기 위해서 (copy) 변할 수 없는 문자열이 필요합니다.속성을 실현하는 대상 만 있다면 새 값을 설정할 때 (copy) 한 부를 사용해야 한다.

  • 4. 방법명


    다음과 같은 특징을 통해 , 의 명칭을 제정할 수 있다.
  • getter = 이 특성은 의 이름을 지정하는 데 사용됩니다.속성의 경우 BOOL 값을 가져오는 방법에 is 접두사를 붙이려면 이 특질로 지정하면 컴파일러가 합성해 줍니다.
  • @prpperty (getter=isAuth) BOOL auth;
    
  • setter= 이 특질이 지정된 의 명칭에 몰려와 흔치 않게 사용된다.

  • over.

    참고 자료


    《Effective Objective-C》

    좋은 웹페이지 즐겨찾기