KVO 키 감청 사례

1825 단어
개술
KVO, 즉 키 - Value Observing 은 지정 한 대상 의 속성 이 수정 되면 대상 이 알림 을 받 는 메커니즘 을 제공 합 니 다.쉽게 말 하면 지 정 된 관찰 대상 의 속성 이 수 정 될 때마다 KVO 는 해당 관찰자 에 게 자동 으로 알 린 다 는 것 이다.KVO 는 사실 '관찰자' 디자인 모델 의 응용 이기 도 한다.나의 견 해 는 이런 모델 은 두 가지 유형 간 의 결합, 특히 업무 논리 와 보기 제어 라 는 두 가지 기능 의 결합 에 유리 하 다 는 것 이다.
모형.
.h
#import 
@interface Person : NSObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,assign)NSInteger age;
@end

컨트롤 러
- (void)viewDidLoad {
    [super viewDidLoad];
    self.person = [[Person alloc]init];
    self.person.name = @"  ";
    self.person.age = 18;
    [self.person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
    
    //UILabel
    self.ageLabel = [[UILabel alloc]init];
    self.ageLabel.frame = CGRectMake(10, 200, 300, 30);
    self.ageLabel.text = [NSString stringWithFormat:@"%@     : %ld  ",self.person.name,self.person.age];
    [self.view addSubview:self.ageLabel];
    
    
    //  
    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(50, 300, 200, 30)];
    [btn setTitle:@"      " forState:UIControlStateNormal];
    btn.backgroundColor = [UIColor redColor];
    [btn addTarget:self action:@selector(clickBtn) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}

-(void)clickBtn{
    self.person.age += 5;
}

/* KVO function,   object keyPath      ,       */
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"age"] && object == self.person) {
        self.ageLabel.text = [NSString stringWithFormat:@"%@      : %ld", self.person.name, self.person.age];
    }
}

좋은 웹페이지 즐겨찾기