Effective Objective-C 2.0 - 제7조: 대상 내부에서 가능한 한 실례 변수에 직접 접근
실례 변수에 직접 접근하면 '설정 방법' 을 사용하지 않습니다. 이것은 관련 속성에 정의된 '메모리 관리 의미' 를 돌아갑니다.
인스턴스 변수에 직접 액세스해도 키 값 관측(Key-Value Observing, KVO) 알림이 트리거되지 않습니다.
(KVO, 객체의 등록 정보가 변경되면 다른 객체에 대한 공지 메커니즘)
속성을 통해 접근하는 것은 이와 관련된 오류를 조사하는 데 도움이 된다. '획득 방법' or, and '설정 방법' 에 단점 (breakpoint) 을 추가하여 이 속성의 호출자와 방문 시기를 감시할 수 있기 때문이다.
최적화 방안: 대상 내부에서 데이터를 읽을 때는 실례 변수를 통해 읽어야 하고 데이터를 쓸 때는 속성(즉setter 방법)을 통해 써야 한다.
초기화 방법과 dealloc 방법에서는 항상 실례 변수를 통해 데이터를 직접 써야 한다.
불활성 초기화 기술을 사용하여 어떤 데이터를 설정하려면 속성을 통해 데이터를 읽어야 합니다.
@interface EOCPerson : NSObject
@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;
- (NSString *)fullName;
- (void)setFullName:(NSString *) fullName;
@end
//
// “ ”,
- (NSString *)fullName
{
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}
//
- (void) setFullName:(NSString *)fullName
{
NSArray *components = [fullName componentsSeparatedByStirng:@" "];
self.firstName = [components objectAtIndex:0];
self.lastName = [components objectAtIndex:1];
}
// ,
- (NSString *) fullName
{
return [NSStringstringWithFormat:@"%@ %@", _firstName, _lastName];
}
- (void) setFullName:(NSString *)fullName
{
NSArray *components = [fullName componentsSeparatedByStirng:@" "];
_firstName = [components objectAtIndex:0];
_lastName = [components objectAtIndex:1];
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.