你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS-KVC/KVO

IOS-KVC/KVO

編輯:IOS開發綜合

KVC 簡介設值的一個工具,對於指向id的對象,像其內存存取值。這有點像java的反射;

存在如下一個對象,已知其屬性name,可取值:

id p=[[Person alloc] init];
NSString *name=[p valueForKey:@"name"];

假設,有一個數組,裡面存在一系列的對象,我們想取出某一屬性放在一個隊列中,如下:

Book *book1=[[Book alloc] init];
        book1.name=@"effctive c++";
        
        Book *book2=[[Book alloc] init];
        book2.name=@" more effctive c++";
        
        Book *book3=[[Book alloc] init];
        book3.name=@" most effctive c++";
        
        NSArray *arr=@[book1,book2,book3];
        
        NSLog(@"%@",[arr valueForKey:@"name"]);

生活中,我們確實存在以上的需求;


KVO指的是設值過程中對其監聽的過程,以實現對業務邏輯的校驗

//創建一個被監視的對象
        Book *book1=[[Book alloc] init];
        
        //設置監聽對象
        BookObserve *observe=[[BookObserve alloc] init];
        
        //對其存值的監聽-這種方法用完後不需要移除監聽器
        [observe observeValueForKeyPath:@"name" ofObject:book1 change:nil context:@"sadsada"];
        
        //對其存值的監聽-02
        [book1 addObserver:observe forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
        
        book1.name=@" most effctive c++";
        NSLog(@"%@",book1.name);
        
        //取消對其存值的監聽-02
        [book1 removeObserver:observe forKeyPath:@"name"];

對於監聽對象,無需實現任何代理,因為他是NSObject的派生類

只要在.m文件中實現如下方法即可監聽:

#pragma mark keyPath:對象屬性 object:對象 change:存取值保存的字典
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
}




  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved