Effective Objective-C 2.0 - 제7조: 대상 내부에서 가능한 한 실례 변수에 직접 접근

2292 단어
메소드 디스패치(method dispatch)를 거치지 않고 인스턴스 변수에 직접 액세스할 수 있습니다.
실례 변수에 직접 접근하면 '설정 방법' 을 사용하지 않습니다. 이것은 관련 속성에 정의된 '메모리 관리 의미' 를 돌아갑니다.
인스턴스 변수에 직접 액세스해도 키 값 관측(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];
}

좋은 웹페이지 즐겨찾기