프록시 및 KVC/KVO 정보

2919 단어

대리점

  • 프록시 디자인 모델의 역할:
  • 1.A 대상은 B 대상의 일부 행위를 감청하고 A는 B의 대리가 된다
  • 2.B 대상은 A 대상에게 몇 가지 일을 알려주고 싶은데, A는 B의 대리가 된다
  • 프록시 디자인 모델의 총괄:
  • 다른 사람의 행동을 감청하고 싶다면 다른 사람의 대리가 되어야 한다
  • 다른 사람에게 알려주고 싶은 것이 있다면 대리인이 되라
  • 대리 디자인 모델의 개발 절차
  • 1.프로토콜 (프로토콜 이름의 형식: 컨트롤 이름 + Delegate) 을 정의하고, 프로토콜에 프록시 방법을 설명합니다. (일반적인 프록시 방법은 @optional)
  • 2.프록시 속성 설명하기: @property (nonatomic, weak) id delegate;
  • 3.내부에서 어떤 행위가 발생할 때 대리에 대응하는 대리 방법을 호출하여 대리 내부에 무슨 일이 발생했는지 통지한다
  • 4.프록시 설정: xxx.delegate = yyy;
  • 5.yyy 대상은 협의를 준수하고 대리 방법을 실현한다

  • 에이전트와 알림의 차이점

  • 에이전트: 한 대상은 다른 한 대상에게 무슨 일이 일어났는지 알려줄 수 있다
  • 알림: 1개 대상은 N 개 대상에게 무슨 일이 일어났는지 알려줄 수 있다
  • KVC\KVO


    KVC(Key Value Coding)의 일반적인 기능:
  • 1.모델 속성에 값 부여
  •       - (nullable id)valueForKey:(NSString *)key;                          // Key 
          - (void)setValue:(nullable id)value forKey:(NSString *)key;          // Key 
          - (nullable id)valueForKeyPath:(NSString *)keyPath;                  // KeyPath 
          - (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;  // KeyPath 
    

    참고: forKeyPath와 forKey 방법의 차이점 * 1>forKeyPath는 forKey의 모든 차이점을 포함합니다 2> forKeyPath는 내부점 문법으로 층층이 내부의 속성에 접근할 수 있습니다 (예를 들어 [person setVallue: @ "HAHA"forKeyPath: @ "dog.name"]) 3>key 값은 반드시 속성 값과 대응해야 합니다. 그렇지 않으면 속성 오류 보고를 찾을 수 없습니다.
  • 2.클래스를 바꾸는 개인 구성원 변수는 KVC를 이용하여 변수를 변경합니다. 예를 들어 개인 클래스에 개인 변수 int가 있습니다.age, [person setValue:@"18"foeKeyPath:@"_age"];
  • 3.사전 회전 모델 person 클래스에는 2개의 속성과 초기화 방법이 있습니다 @property(nonatomic,copy) NSString*name; @property (nonatomic, copy) NSString *mony;//사전회전 모형-(instancetype) initDictionay: (NSDictionary *) dict {if(self = [supert init]) {//KVC 할당 [person setValuesForKeysWithDictionary: dict];}}NSDictionary dict = @ {@ "name": @ "하스키", @ "mony": @ "198.9"};Personperson=[ [Person alloc] initDictionay: dict] ;
      -  : Key person   
    
  • 4 모형 회전 사전 person 클래스에는 2개의 속성이 있습니다 @property(nonatomic, copy) NSString*name;property (nonatomic, copy) NSString *mony; Person *person = [[Person alloc] init]; person.name = @"BB"; person.age = @"18";//모델 전환 사전 [person dictionary WithValuesForKeys:@[@ "name", @ "age"];

  • KVO(Key Value Observing) 일반 기능: 모델 속성 값의 변경 내용 수신
  • KVO 사용 단계
  • // cc aa name 
    [aa addObserver:cc forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];
    
    // cc 
    /**
     *  object keyPath 
     */
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
        NSLog(@" %@ %@ , %@", object, keyPath, change);
    }
    
  • 통지는 다음 문장에서 설명할 것이다
  • 좋으면 좋아요 눌러주세요
  • 부족한 점을 지적해 주셔서 감사합니다.
  • 좋은 웹페이지 즐겨찾기