수색…


비고

KVC : - 핵심 가치 코딩

일반적으로 인스턴스 변수는 속성이나 접근자를 통해 액세스하지만 KVC는 문자열 형식으로 변수에 액세스하는 또 다른 방법을 제공합니다. 이런 방식으로 클래스는 사전과 같은 역할을하며 속성 이름 (예 : "age")은 키가되고 속성이 보유하는 값은 해당 키의 값이됩니다.

For example, you have employee class with "age" property. Normally we access like this.
emp.age = @”20″;
NSString age = emp.age; 

But KVC works like this: 
[emp valueForKey:@"age"]; 
[emp setValue:@"25" forKey:@"age"];

KVO : - 핵심 가치 옵저버

속성에 변화가있을 때 객체가 통보되는 메커니즘을 KVO라고합니다. 예 : 키보드 알림

예를 들어, person 객체는 BankAccount 객체에서 accountBalance 속성이 변경 될 때 알림을 얻는 데 관심이 있습니다. 이를 위해 Person 객체는 addObserver : forKeyPath : options : context : 메시지를 보내어 BankAccount의 accountBalance 속성을 관찰자로 등록해야합니다.

KVO 관찰을위한 컨텍스트 사용

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context

컨텍스트는 다른 사람들이 사용할 수 있도록 클래스를 제공하는 경우 중요합니다. 컨텍스트는 클래스 관찰자가 호출중인 옵저버를 확인하도록합니다.

관찰자를 지나치지 않는 문제는 어떤 객체가 클래스를 서브 클래스 화하고 동일한 객체, 동일한 키 및 컨텍스트를 전달하지 않는 관찰자를 등록하면 수퍼 클래스 관찰자가 여러 번 호출 될 수 있다는 것입니다.

고유하고 내부적 인 변수는 좋은 컨텍스트입니다.

자세한 내용은.

중요성과 좋은 맥락

NSObject 서브 클래스의 프로퍼티 관찰하기

대부분의 KVO 및 KVC 기능은 모든 NSObject 하위 클래스에 기본적으로 이미 구현되어 있습니다.

personObject 라는 객체의 firstName 이라는 속성을 관찰하기 시작하려면 관찰 클래스에서 다음을 수행하십시오.

[personObject addObserver:self
               forKeyPath:@"firstName"
                  options:NSKeyValueObservingOptionNew
                  context:nil];

하는 객체 self 위의 코드에서 다음 의지 수신을 말한다 observeValueForKeyPath:ofObject:change:context: 메시지마다 관찰 된 키 경로 변경.

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary<NSString *,id> *)change
                       context:(void *)context
{
    NSLog(@"new value of %@ is: %@", keyPath, change[NSKeyValueChangeNewKey]);
}

"키 경로"는 KVC 용어입니다. NSObject 서브 클래스는 기본적으로 KVC 기능을 구현합니다.

_firstName 이라는 인스턴스 변수는 @"firstName" 키 경로로 액세스 할 수 있습니다.

라는 게터 방법 firstName 액세스 할 때 호출된다 @"firstName" 없이 거기되는 키 경로 _firstName 인스턴스 변수 또는 setFirstName 세터 방법.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow