iOS 키 값 인코딩(KVC) 및 키 값 감지(KVO)

KVC
setter와 Getter 방법으로 대상의 속성을 설정하고 수정하며 간략한 점문법을 제외하고는oc는 더욱 유연한 조작 방식을 제공했다. 이런 방식은 문자열 형식으로 간접 조작 대상의 속성을 허용하는데 전체 이름은 키value coding(약칭 KVC), 즉 키 값 인코딩이다.
가장 기본적인 두 가지 작업:
setValue: 속성 값 forKey: 속성 이름 지정 속성 할당
valueForKey: 속성 이름 지정 속성 값 가져오기
#import <Foundation/Foundation.h>

@interface MineKvc : NSObject

@property (nonatomic,copy) NSString * name ;
@property (nonatomic,copy) NSString * pass ;
@property (nonatomic,copy) NSDate * birth  ;
@end
#import <Foundation/Foundation.h>
#import "MineKvc.h"

int main(int argc, const char * argv[]) {
 
    MineKvc * myKvc = [[MineKvc alloc]init];
    [myKvc setValue:@"Pudege" forKey:@"name"];
    [myKvc setValue:@"2015" forKey:@"pass"];
    [myKvc setValue:[[NSDate alloc]init] forKey:@"birth"];
    
    NSLog(@"%@--%@--%@",[myKvc valueForKey:@"name"],[myKvc valueForKey:@"pass"],[myKvc valueForKey:@"birth"]);
    
    
}

setValue:forKey: 코드 기본 메커니즘은 다음과 같습니다.
1. 속성의 setName 우선 호출:
2. setter 방법이 없으면 KVC에서 검색합니다name의 구성원 변수, KVC 쌍name 구성원 변수에 값을 부여합니다.
3. 1과 2가 없으면 KVC는 name 변수를 검색합니다. 어떤 정의가 있든지 KVC는name 구성원 변수에 값을 부여합니다.
4. 상기 3개를 찾지 못하면 이 대상의 setValue:forUndefinedKey를 실행합니다.
valueForKey 동상.
코드는 다음과 같다.
#import <Foundation/Foundation.h>

@interface MineKvc : NSObject
{
    @package
    NSString * kvc ;
    NSString * _kvc ;
}
@property (nonatomic,copy) NSString * name ;
@property (nonatomic,copy) NSString * pass ;
@property (nonatomic,copy) NSDate * birth  ;

@end
@implementation MineKvc
{
    int imkvc;
}
#import <Foundation/Foundation.h>
#import "MineKvc.h"

int main(int argc, const char * argv[]) {
 
    MineKvc * myKvc = [[MineKvc alloc]init];
    [myKvc setValue:@"Pudege" forKey:@"name"];
    [myKvc setValue:@"2015" forKey:@"pass"];
    [myKvc setValue:[[NSDate alloc]init] forKey:@"birth"];
    
    NSLog(@"%@--%@--%@",[myKvc valueForKey:@"name"],[myKvc valueForKey:@"pass"],[myKvc valueForKey:@"birth"]);
    
    
    
    [myKvc setValue:@"KVC" forKey:@"kvc"];
    NSLog(@"_kvc= %@",myKvc->_kvc);
    NSLog(@"kvc = %@",myKvc->kvc);
    
    
    [myKvc setValue:@"implementation" forKey:@"imkvc"];
    NSLog(@"%@",[myKvc valueForKey:@"imkvc"]);
    
}

2015-07-28 11:46:28.679 KVC[1879:63384] Pudege--2015--2015-07-28 03:46:28 +0000
2015-07-28 11:46:28.680 KVC[1879:63384] _kvc= KVC
2015-07-28 11:46:28.680 KVC[1879:63384] kvc = (null)
2015-07-28 11:46:28.680 KVC[1879:63384]0은 상기 지식점을 제외하고undefinedKey를 다시 쓰는 두 가지 방법을 주의하여 컴파일러가 이상을 던지지 않도록 해야 한다.
인트와 같은 간단한 데이터 형식에 KVC를 사용하면 setNilValueForKey를 다시 써야 합니다.
Key 경로
객체의 복합 속성, 즉 KVC의 Key 경로입니다.하나의 대상은pudge 형식의pudge 속성을 포함하고,pudge 형식은name 속성을 포함하며, KVC는pudge를 통과합니다.name 이 Key 경로는 값을 지정합니다.
setValue:forKeyPath;
valueForKeyPath;
KVO
kvo 메커니즘인 NSKeyValueObserving 프로토콜은 지원되며 NSObject는 이 프로토콜을 따릅니다.일반적인 방법:
addObserver: forKeyPath: options: context 지정한 키 경로를 감청하기 위해 감청기를 등록합니다
removeObserver: forKeyPath: 키 경로에 대한 지정한 감청기 삭제
removeObserver
:
forKey
Path              
위와 같이 상하문context 추가
이 방법을 다시 쓰면 감청된 데이터 모델이 바뀌면 감청기의 이 방법을 되돌려준다.
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

좋은 웹페이지 즐겨찾기