基于kvo的观察者模式

来源:互联网 发布:无人机编队表演算法 编辑:程序博客网 时间:2024/06/11 01:53

以下是我自己写的代码,方便新手理解kvo模式的流程。


思路,创建Person类,年龄属性,

show类负责显示Person对象,年龄显示的变化。

用kvo模式。

#import <Foundation/Foundation.h>

#import "Person.h"

#import "Show.h"

int main(int argc,const char * argv[]) {

    

   Person *p = [[Personalloc]init];

    

    p.age=11;

    

   Show *s = [[Showalloc]initWithPerson:p];

    

    [p setValue:@22forKey:@"age"];

    [p setValue:@23forKey:@"age"];

    

    

   // NSLog(@"%ld",p.age);

   return 0;

}


--------------------


#import <Foundation/Foundation.h>


@interface Person :NSObject


@property(nonatomic,copy)NSString *name;

@property(nonatomic,assign)NSInteger age;


@end


--------------------

#import "Person.h"


@implementation Person


@end


--------------------

#import <Foundation/Foundation.h>

#import "Person.h"


@interface Show : NSObject


@property(nonatomic,retain)Person *person;


- (id)initWithPerson:(Person *)per;


@end

------------------------

#import "Show.h"

@implementation Show


- (id)initWithPerson:(Person *)per{

   self = [superinit];

    

   if(self){

       _person = per;

        /*注意这里:把创建的per对象,即p,赋值给show里面的Person类属性,即设置,要拿出来还要生成get方法,所以这里不能简单的写个属性,直接@property()即可。*/

        //_person = [per retain];

        

        [_personaddObserver:selfforKeyPath:@"age"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOldcontext:nil];

        

    

    }

    return self;

}

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

{

   if([keyPath isEqualToString:@"age"]){

        

   NSNumber *age = [change objectForKey:@"new"];

    

   NSInteger newage = [age integerValue];

    

   NSLog(@"现在的age%ld",newage);

    }else{

    

       NSLog(@"error");

    }

    

}


- (void)dealloc{


    [_personremoveObserver:selfforKeyPath:@"age"];

    


}


@end



0 0
原创粉丝点击