소담 @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에 따라 라이센스가 부여됩니다.