IOS-KVC/KVO

KVC 프로필 에 값 을 설정 하 는 도구 입 니 다.id 를 가리 키 는 대상 에 대해 메모리 액세스 값 과 같 습 니 다.이것 은 자바 의 반사 와 비슷 하 다.
다음 대상 이 존재 합 니 다.속성 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
{
}

좋은 웹페이지 즐겨찾기