소담 @property의 특질
property
(속성)를 자주 사용한다. 속성은 OC 언어의 특성이고 주요 역할은 대상의 데이터를 봉인하는 것이다. OC 대상은 일반적으로 필요한 데이터를 각종 실례 변수로 저장한다.실례 변수는 일반적으로 접근 방법 (access method) 을 통해 접근합니다.속성을 사용할 때 또 다른 문제는 주의해야 한다. 바로 속성 뒤에 자주
(attribute)를 덧붙이기 때문에 모든 특질의 작용을 잘 구분하는 것이 필요하다.예를 들어 다음 코드에는 세 가지 특성이 있습니다.@property (nonatomic, copy, readonly) NSString * aString;
속성의 특성은 주로 다음과 같은 네 가지로 나뉜다.
1. 원자성
기본적으로 컴파일러가 합성하는 방법은 잠금 메커니즘을 통해 원자성을 확보한다.만약 속성이
nonatomic
특질을 갖추고 있다면 동기화 자물쇠를 사용할 필요가 없다.nonatomic
와 대응하는 것은atomic
이다.주의: atomic
라고 명명된 특질이 없지만, 속성의 특질에 atomic
쓸 수 있는 성명을 던져도 컴파일러가 틀리지 않습니다.만약 자신이 속성의 접근 방법을 정의한다면 속성의 특질에 따라야 한다.atomic
특질을 갖춘 속성 획득 방법은 잠금 메커니즘을 통해 조작의 원자성을 확보한다.즉, 두 라인이 같은 속성을 읽고 쓰면 언제든지 유효한 속성 값을 얻을 수 있다는 것이다.만약nonatomic
특질(잠금하지 않음)의 속성이 있다면 그 중의 한 라인이 값을 바꿀 때 다른 라인도 갑자기 침입하여 수정되지 않은 속성 값을 읽을 수 있습니다. 이런 상황에서 읽은 값은 잘못된 것일 수 있습니다.그러나 atomic
특질은 시스템의 에너지 소모가 비교적 크고 속성은 자주 사용nonatomic
이며 기본적인 특질이기도 하다.2. 읽기/쓰기 권한
(getter)
와 (setter)
, 속성이 @synthesize로 이루어지면 컴파일러가 자동으로 이 두 가지 방법을 생성한다(Xcode에서는 보이지 않지만 직접 사용할 수 있다) (getter)
만 가지고 @synthesize에서 속성이 실현될 때만 컴파일러가 합성하여 얻을 수 있습니다.3. 메모리 관리
속성은 데이터를 봉인하는 데 사용되며 데이터는
(concrete ownership semantic)
가 필요합니다. 다음은 속성에 영향을 줄 수 있습니다 (setter)
.
은'순수량 유형·(예를 들어 NSInteger, CGFloat, int 등)에 대한 조작만 수행할 수 있다. (owning relationship)
.이 속성에 새 값을 설정할 때, 설정 방법은 먼저 새 값을 보존하고, 낡은 값을 방출한 다음에 새 값을 부여합니다. - (void)setName:(NSString *)newName {
NSString *tmp = newName;
[_oldName release];
_oldName = tmp;
}
(nonowning relationship)
.이 속성에 새 값을 설정할 때, 설정 방법은 새 값도 남기지 않고 낡은 값도 놓지 않습니다.이 특징은 assign
와 유사하지만 속성에 대응하는 대상이 방출될 때 속성의 값은 nil
로 설정됩니다.assign
특질과 같지만 다른 것은 (object type)
에 적용된다는 것이다. 이 특질은 (unretained)
를 나타낸다. 가리키는 대상이 방출될 때 속성은 자동으로 nil
(안전하지 않은 unsafe)로 설정되지 않는다는 점은 weak
와 구분된다.strong
와 유사하며, 다른 것은
새 값을 보류하지 않고 새 값을 복사(copy)하는 것이다.속성 유형은 NSString
일 때 이 특징을 자주 사용하여 봉인성을 보호한다. 설정 방법에 전달된 새로운 값은 NSMutableString
류의 실례를 가리킬 수 있기 때문에 문자열을 복사하지 않으면 속성을 설정한 후에 문자열의 값은 대상이 알지 못하는 상황에서 수정될 수 있다.따라서 대상의 값이 무심코 변동되지 않도록 하기 위해서 (copy)
변할 수 없는 문자열이 필요합니다.속성을 실현하는 대상
만 있다면 새 값을 설정할 때 (copy)
한 부를 사용해야 한다.4. 방법명
다음과 같은 특징을 통해
,
의 명칭을 제정할 수 있다.
의 이름을 지정하는 데 사용됩니다.속성의 경우 BOOL
값을 가져오는 방법에 is
접두사를 붙이려면 이 특질로 지정하면 컴파일러가 합성해 줍니다.
@prpperty (getter=isAuth) BOOL auth;
의 명칭에 몰려와 흔치 않게 사용된다.over.
참고 자료
《Effective Objective-C》
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.