4.KVO,KVO,通知之objective-c

 KVC

 

[对象 setValue:aValue forKeyaKey]; //为对象的aKey变量赋值

 

aValue = [对象 valueForKey:aKey]; //把对象的aKey变量的值取出来

 

[对象 setValue:aValue forKeyPath:aKeyPath]; //设置值

 

id aValue = [对象 valueForKeyPath:aKeyPath]; //取值

 

注意:keyPath里边的变量!aKeyPath填 p.name 之类的(可以很多点)

 

for example:

 

Student *stu = [[Student alloc]init];

[stu setValue:@"张三" forKey:@"name"]; //对对象变量赋值

NSString s1 = [stu valueForKey:@"name"]; //变量值取出

[stu release];

 

 

 

KVO:

 

1、注册监听

[被监听对象  addObserver: 监听者 

                      forKeyPath: 被监听对象的属性 

                      options:监视内容(新值或旧值)

                       context:额外信息];

 

 

2、监听者实现监听方法(在监听者的类里面实现,不实现会崩溃)

-(void)observerValueForKeyPath:(NSString*)keyPath ofObject:(id)object (被监听对象) change:(NSdictionary*)change(所监对象属性变化) context:(void*)context

 

 

3、监听触发条件

被监听对象的属性发生变化时  //自动调用下面的方法 

 

for example:

 

-(void)observerValueForKeyPath:(NSString*)keyPath  ofObject:(id)object change:(NSDictionary*)change context:(void*)context

{

        NSLog:(@"keyPath:%@ object:%@ change:%@ context:%@ ",keyPath,object,change,context);   //可以在这方法里实现想做的事  比如发送通知

}

 

Student *stu = [[Student alloc]init];

stu.name = @"张三";

【stu addObserver self forKeyPath :@"name" options:NSKeyValueObservingOptionNew context:nil】;

stu.name = @"李四";   //值改变调用方法

stu.name = @"王五";  //值改变有调用方法

【stu release】;

 

通知:

 

 

1、获得通知中心对象

 

NSNotificationCenter *center= [NSNotificationCenter defaultCenter];   //单例实际事获得通知中心的地址

 

 

2、监听通知

[center addObserver :监听者 selector:须执行的方法 name:所监听者通知的名称 object:通知发送者];

 

3、通知中心发布消息

 

[center PostNotificationName:@"国王万岁" object:某人];

 

4.移除监听中心

 

[center removeObserver:self name:@"国王万岁" object:某人];

 

 

 

 

King *king = [[King alloc]init];

Farmer *farmer = [[Farmer alloc]init];

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

[center addObserver:farmer selector:@selector(test:) name:@"国王万岁" object:king];

[center postNotificationName:@"国王万岁" object:king];

[center removeObserver:farmer];

[king release];

[farmer release];

 

-(void)test:(NSNotification*)n  //方法必须实现 在监听通知的类里面 做想做的事

{

     NSLog(@"name:%@ object:%@ userInfo:%@",[n name],[n object],[n userInfo]);

}

你可能感兴趣的:(ios,Objective-C,oc,KVO,KVC)