iOS 키 값 인코딩(KVC) 및 키 값 감지(KVO)
3662 단어 Objective-C등록 정보KVOKVC
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PreferenceBundle에서 오른쪽 상단에 Respring 버튼을 클릭합니다.만나서 반갑습니다, Minazuki라고합니다. 프로필 이름 : Minazuki_dev Twitter : Repo : 아직 중학생이므로 말이 이상한 곳이 있습니다만 용서해 주세요… 🙏 theos (Mac이든 단품이든 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.