經過KVO解除類之間的耦合

一,概述

KVO,即:Key-Value Observing,它提供一種機制,當指定的對象的屬性被修改後,則對象就會接受到通知。簡單的說就是每次指定的被觀察的對象的屬性被修改後,KVO就會自動通知相應的觀察者了。ide

定義一個類Aorm

@interface A : NSObject {
int age;
}
@endserver

 

2.定義此A爲Controller的屬性,實例化它,監聽它的屬性,並顯示在當前的View裏邊對象

- (void)viewDidLoad
{
[super viewDidLoad];rem

a = [[A alloc] init];
a.age = 5;
[a addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];get

myLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 30 )];
myLabel.textColor = [UIColor redColor];
myLabel.text = [NSString StringWithFormat:@"%d",a.age];
[self.view addSubview:myLabel];

UIButton * b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
b.frame = CGRectMake(0, 0, 100, 30);
[b addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:b];it

}io

3.當點擊button的時候,調用buttonAction方法,修改對象的屬性object

-(void) buttonAction
{
a.age += 5;
}select

4.實現回調方法

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if([keyPath isEqualToString:@"age"])
{
[NSString StringWithFormat:@"%d",a.age];
}
}

5.最後當頁面退出時需remove觀察者

相關文章
相關標籤/搜索