2014-11-01 4 views
1

잠시 동안이 주제에 대해 조사했습니다. 나는 여전히 속성에 대한 커스텀 Setter를 작성하는 것이 좋은지 또는 KVO를 사용하는 것이 필요한지 확실하지 않습니다. 내가 가지고 싶은맞춤 설정 기 또는 KVO 사용

는 다음과 같습니다 :

I 클래스 MyInputBox을 가지고 maxCharCount라는 하나의 속성, maxCharCount의 값이 변경 될 때, 내가 뭔가를하고 싶지가있어. 그래서이 일을, 내가 사용

@interface MyInputBox : UITextField 
@property (nonatomic, assign) NSUInteger maxCharCount; 
@end 

후 초기화 방법에서, 나는 다음과 같이 수행

[self addObserver:self forKeyPath:@"maxCharCount" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; 

- (void)observeValueForKeyPath:(NSString *)keyPath 
         ofObject:(id)object 
         change:(NSDictionary *)change 
         context:(void *)context 
{ 
    if ([keyPath isEqualToString:@"maxCharCount"]){ 
     [self setLabelWarningByDefaultText]; 
    } 


} 

이 지정 세터를 사용하는 것보다 더 나은가요? 내가 정의 세터를 사용하는 경우 수행 할 때

게다가, 당신의 클래스는 뷰 클래스이기 때문에 willChangeValueForKey:didChangeValueForKey:

답변

0

를 호출해야합니다, 그것은 자신의 뷰를 업데이트한다는 의미가 있습니다. 따라서 사용자 정의 설정기를 사용하는 것이 더 좋습니다.

KVO는 Observer/Observable 패턴을 처리하지 못하게하는 저급 메커니즘입니다. 다른 객체가 객체 속성의 변경 사항에 대한 알림을 얻는 데 유용합니다. 나 자신의 속성을 관찰하는 객체의 어떤 가치도 보이지 않는다.

맞춤 설정 도구를 구현하는 경우 직접 willChangeValueForKey: 또는 didChangeValueForKey:으로 전화하지 않아도됩니다. 인스턴스 변수를 설정하면

- (void)setMaxCount:(NSInteger)count { 
    _maxCount = count; 
    // Do any updates you want to do 
} 
+0

답장을 보내 주셔서 감사합니다. – Vigor

1

KVO 상당히 느린 충분하다, 또한보다 적게보다는 고급 사용자 지정 코드를 많이 쓰는 포함한다.

내 의견으로는, 트리거하려는 사용자 지정 코드가 속성이 정의 된 클래스에있는 경우 사용자 지정 작성기가 더 간단하고 간단하게 작성할 수 있습니다.

KVO는 다른 개체의 속성에서 변경되는 값을 관찰하고자 할 때 유용합니다.

비정상적인 상황을 제외하고는 willChangeValueForKey 및 didChangeValueForKey를 사용자 지정 설정자에서 호출하는 것에 대해 걱정할 필요가 없다고 생각합니다. 시스템은 속성 getter 및 setter를 사용할 때 해당 메서드를 호출 할 수 있도록 처리합니다.

Xcode 설명서의 "Key-Value Coding 프로그래밍 가이드"장을 읽는 것이 좋습니다.

+0

고마워요. C#으로 윈도우 폰을 코딩 할 때, 나는 스스로 세팅을하는 것이 이상한 문제를 일으킨다는 것을 기억했다. 그래서 저는 혼자서 세터에 대해 조금 걱정합니다. iOS 측 (obj C)에서 사용하는 것이 안전하다면 괜찮습니다. – Vigor

+0

왜 다운 투표입니까? 누군가 내가 잘못된 정보를 제공했다고 생각하면 꼭 위로하십시오! –