KVC 기본 원리
1. KVC의 get 방법 [myObject valueForKey:@"name"];
방법으로 myObject
중 name
속성이나 구성원 변수의 값을 얻는다.myObject 객체에 name 속성이나 구성원 변수가 없으면 시스템이 충돌합니다.이 문제를 어떻게 해결할 것인가.1. 리메이크valueForUndefinedKey
방법을 통해 붕괴 문제를 해결한다.- (id)valueForUndefinedKey:(NSString *)key{
return nil;
}
2. getName,name 또는 isName 중 하나를 다시 쓰는 방법으로 충돌 문제를 해결합니다.KVC 밑바닥 작업, valueForKey
: 우선 우리가 주동적으로 속성을 만들었는지 판단하고 없으면 get, is 세 가지 방법(문자 찾기 방식)을 찾습니다.만약 찾지 못한다면, 계속해서 다른 유형의 검색 방식에 따라 찾으세요.액세스:accessInstanceVariablesDirectly 메서드, YES인 경우key、_isKey, key, isKey의 순서대로 구성원 변수에 접근합니다.- (NSString *)name{
NSLog(@"%s",__func__);
return @"name";
}
- (NSString *)isName{
NSLog(@"%s",__func__);
return @"isName";
}
- (NSString *)getName{
NSLog(@"%s",__func__);
return @"getName";
}
3. 상기 방법이 없으면 KVC는 프로토콜에 따라 다른 종류(문자열, 그룹, 사전 등)의 API를 두루 훑어본다.배열 유형: countOf, objectInAtIndex- (NSInteger)countOfName{
return 2;
}
- (id)objectInNameAtIndex:(NSInteger)index{
return @"name";
}
name 값 NSLog(@"%@",[myObject valueForKey:@"name"]);
을 출력할 때: name name
2. KVC의 set 방법
myObject에name 속성이나 구성원 변수가 없으면 KVC의 set 방법을 실행할 때 프로그램을 실행할 때 충돌이 발생합니다.[myObject setValue:@"KVC" forKey:@"name"];
KVC의 set 메소드 속성 이름 실행 순서key、_isKey、key、isKey. @interface MyObject ()
{
NSString * _name;
NSString * name;
NSString * isName;
}
3. KVC가 개인 변수를 수정하는 것을 어떻게 막는가 + (BOOL)accessInstanceVariablesDirectly{
return NO;
}
이 API가 NO로 되돌아오면 키 검색을 중지하면 외부에서 KVC를 통해 개인 변수를 수정하는 것을 막을 수 있습니다.KVC의 set 메서드에서 클래스에 이(가) 없는 경우name 속성, 시스템이키, 키, isKey 순서로 키를 할당합니다.KVC의 get 방법으로는 이 API를 막을 수 없습니다.KVC 속성 획득은 키에 대한 것입니다. 규칙에 따라 일련의 검색을 합니다. 먼저 검색 방법을 찾고 해당하는 방법을 찾지 못하면accessInstanceVariablesDirectly가 YES로 되돌아오는지 확인하고 YES로 돌아가 계속 검색한 다음에 변수를 검색하고 NO로 돌아가면 검색을 중지합니다.총괄적으로 말하면: 1. 먼저 검색하는 방법->accessInstanceVariablesDirectly(YES)->변수를 다시 검색한다.2. 먼저 검색하는 방법->accessInstanceVariablesDirectly(NO)->끝;
4. 응용 장면
사유 방법을 고치다.예: [self.tf setValue:[UIColor redColor] forKeyPath:@"placeholderLabel.textColor"];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
- (id)valueForUndefinedKey:(NSString *)key{
return nil;
}
- (NSString *)name{
NSLog(@"%s",__func__);
return @"name";
}
- (NSString *)isName{
NSLog(@"%s",__func__);
return @"isName";
}
- (NSString *)getName{
NSLog(@"%s",__func__);
return @"getName";
}
- (NSInteger)countOfName{
return 2;
}
- (id)objectInNameAtIndex:(NSInteger)index{
return @"name";
}
myObject에name 속성이나 구성원 변수가 없으면 KVC의 set 방법을 실행할 때 프로그램을 실행할 때 충돌이 발생합니다.
[myObject setValue:@"KVC" forKey:@"name"];
KVC의 set 메소드 속성 이름 실행 순서key、_isKey、key、isKey. @interface MyObject ()
{
NSString * _name;
NSString * name;
NSString * isName;
}
3. KVC가 개인 변수를 수정하는 것을 어떻게 막는가 + (BOOL)accessInstanceVariablesDirectly{
return NO;
}
이 API가 NO로 되돌아오면 키 검색을 중지하면 외부에서 KVC를 통해 개인 변수를 수정하는 것을 막을 수 있습니다.KVC의 set 메서드에서 클래스에 이(가) 없는 경우name 속성, 시스템이키, 키, isKey 순서로 키를 할당합니다.KVC의 get 방법으로는 이 API를 막을 수 없습니다.KVC 속성 획득은 키에 대한 것입니다. 규칙에 따라 일련의 검색을 합니다. 먼저 검색 방법을 찾고 해당하는 방법을 찾지 못하면accessInstanceVariablesDirectly가 YES로 되돌아오는지 확인하고 YES로 돌아가 계속 검색한 다음에 변수를 검색하고 NO로 돌아가면 검색을 중지합니다.총괄적으로 말하면: 1. 먼저 검색하는 방법->accessInstanceVariablesDirectly(YES)->변수를 다시 검색한다.2. 먼저 검색하는 방법->accessInstanceVariablesDirectly(NO)->끝;
4. 응용 장면
사유 방법을 고치다.예: [self.tf setValue:[UIColor redColor] forKeyPath:@"placeholderLabel.textColor"];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
+ (BOOL)accessInstanceVariablesDirectly{
return NO;
}
사유 방법을 고치다.예:
[self.tf setValue:[UIColor redColor] forKeyPath:@"placeholderLabel.textColor"];
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.