Objective-C(17, KVC 키 값 인코딩 및 실례 설명) - iOS 개발 기초
17. 키 값 인코딩 KVC
KVC에 대한 자세한 내용은 다음 예제에서 설명합니다.
Person.h 파일, Person 클래스에 name과age 두 개의 구성원 변수가 있음
@interface Person : NSObject {
@private
NSString *_name;
NSInteger _age;
}
- (void)setAge:(NSInteger)age;
@end
Person.이 방법을 실현하다
@implementation Person
- (NSString *)description {
return [NSString stringWithFormat:@"name:%@,age=%li", _name, _age];
}
- (void)setAge:(NSInteger)age {
_age = age;
}
@end
main.m
Person *p = [[Person alloc] init];
// p->_name = @"Zane";
//1. KVC private
[p setValue:@"Zane" forKey:@"name"];
//2. KVC
NSString *name = [p valueForKey:@"_name"];
NSLog(@"%@", name);
[p setValue:@21 forKey:@"age"];
NSLog(@"%@", p);
output:
2015-07-09 17:29:43.477 exercise_KVC[579:24344] Zane 2015-07-09 17:29:43.478 exercise_KVC[579:24344] name:Zane,age=21
1. 키 값 인코딩(key-value coding): 대상에 포함된 정보를 나타내는 문자열을 키 값으로 사용하여 이 정보를 간접적으로 접근하는 방식입니다.
기본적으로, 액세서리 방법, 성명 속성, 실례 변수만 존재하면, 그 이름을 문자열로 접근할 수 있다.(이 변수가 @private에서 개인적으로도 접근할 수 있습니다)
2. 속성 값을 설정합니다.
- (void)setValue:(id)value forKey:(NSString *)key; //
[p setValue:@"Zane" forKey:@"name"];
a. 만약 여기name가 잘못 썼다면nama,nam1e 등으로 쓰면 컴파일러가 잘못 보고하지 않지만 충돌 b,value를 id 형식으로 실행할 수 있기 때문에 기본 데이터 형식이라면 포장해야 합니다
속성 값 가져오기
- (id)valueForKey:(NSString *)key;
NSString *name = [p valueForKey:@"_name"];
만약 사람이 개 한 마리를 가지고 있다면, @class의 방식으로 Person에 추가합니다.h에서 개에 dogName 속성이 있으면 경로 설정을 지정할 수 있습니다
[p setValue:@"wangwang" forKeyPath:@"dog._dogname"];
NSLog(@"%@",[p valueForKeyPath:@"dog._dogname"])
- (id)valueForKeyPath:(NSString *)keyPath; - (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
3. 단점(1) 대상을 향한 봉인성을 파괴한다.(2) 컴파일러는 설정된 키밸류에 대해 버그 검사를 하지 않습니다.(3) 문자열을 먼저 분석해야 하며 실행 효율이 set과 get 방법보다 낮다
4, 기타 설명 (1) KVC를 사용하여 속성을 설정하고 현재 클래스에서 해당하는 set 방법이 있는지 우선적으로 찾습니다. set 방법 설정이 있으면 없으면 속성 설정을 찾습니다. 호출하려면age만 쓸 수 있고 쓸 수 없습니다예컨대
[p setValue:@21 forKey:@"age"];
[p setValue:@21 forKey:@"_age"];
age의 set 방법 실현에 단점을 설정할 수 있습니다. 만약에age는 set 방법을 사용하지 않습니다
(2) 일대다의 관계는 일반적으로 NSArray로 포장한 다음에 setValue 방법을 통해value로 값을 부여한다.액세스할 때 경로로valueForKeyPath에 액세스
(3) 수치 계산은 상기 예에서 Person에 책 구성원 변수를 증가시킨다.그리고 Dog.h멤버 변수 보유dogage
@interface Dog : NSObject
{
int _dogage;
}
- (instancetype)initWithAge:(int)age; //
@end
main.m
Dog* dog1 = [[Dog alloc] initWithAge:20];
Dog* dog2 = [[Dog alloc] initWithAge:30];
Dog* dog3 = [[Dog alloc] initWithAge:10];
NSArray *array = [NSArray arrayWithObjects:dog1,dog2,dog3, nil];
[p setValue:array forKey:@"dog"]; //
NSLog(@"%@",[p valueForKeyPath:@"dog.@count"]); //dog
NSLog(@"%@",[p valueForKeyPath:@"dog.@sum._dogage"]); // dogage
NSLog(@"%@",[p valueForKeyPath:@"dog.@avg._dogage"]); //
NSLog(@"%@",[p valueForKeyPath:@"dog.@min._dogage"]); //
NSLog(@"%@",[p valueForKeyPath:@"dog.@max._dogage"]); //
output:
2015-07-09 17:29:43.479 exercise_KVC[579:24344] 3
2015-07-09 17:29:43.479 exercise_KVC[579:24344] 60
2015-07-09 17:29:43.480 exercise_KVC[579:24344] 20
2015-07-09 17:29:43.480 exercise_KVC[579:24344] 10
2015-07-09 17:29:43.480 exercise_KVC[579:24344] 30
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[iOS] UIColor+Change 색상 클래스의 클래스 확장색상 클래스 UIColor의 토대 위에서 클래스(Category)로 확장되었습니다. 주요 기능은 다음과 같습니다. 색상 객체에 대한 RGB 수치 얻기 -(CGFloat)getRGB; 설명: 이 방법은 인터넷에서 유행...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.