您的位置:首页 > 移动开发 > Objective-C

OC-KVO的应用

2015-09-17 19:03 519 查看
main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Ibokan.h"
int main(int argc,
const char * argv[])
{
    @autoreleasepool
    {
        //(1)KVO测试
        
        Ibokan *ib=[Ibokan
new];
        NSLog(@"%@",ib.frontDesk.someone);
        
        //改变属性值,会自动调用observeValueForKeyPath
     //   [ib comein:@"daleng"];
        
      
    }
    return
0;
}

Person.h

#import <Foundation/Foundation.h>

@interface Person :
NSObject
@property (nonatomic,copy)
NSString *someone;
@end

Ibok.h

#import <Foundation/Foundation.h>
#import "Person.h"
@interface Ibokan :
NSObject
//前台妹妹
@property (nonatomic,strong)
Person *frontDesk;
//模拟进来一个人,改变所记录的名字
-(void)comein:(NSString *)name;
@end

Ibok.m

#import "Ibok.h"

@implementation Ibokan
- (instancetype)init
{
    self = [super
init];
    if (self) {
        
        self.frontDesk= [
Person new];
        self.frontDesk.someone=@"yang";
        //1.注册订阅者
        [self.frontDesk
addObserver:self
forKeyPath:@"someone"
options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld
context:nil];
    }
    return
self;
}

//2.处理属性改变
//一旦.someone改变,此方法就是调用
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary
*)change context:(void *)context
{
    NSLog(@"==================");
    NSLog(@"%@",change);
    NSLog(@"新的值:%@",change[@"new"]);
    NSLog(@"旧的值:%@",change[@"old"]);
    if ([change[@"new"]isEqualToString:@"ladeng"])
{
        
        NSLog(@"校长出来迎接");
    }
    
    
}
-(void)comein:(NSString *)name
{

    self.frontDesk.someone=name;

}

-(void)dealloc
{
    [self.frontDesk
removeObserver:self
forKeyPath:@"someone"];
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Objective-C