프 록 시 디자인 모드 & 블록 디자인 모드 & & KVC \ KVO

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

  • 블록 디자인 모드
  • 대리 디자인 모델 의 역할:
  • 1. A 대상 이 B 대상 의 일부 행 위 를 감청 하고 B 에서 하나의 block 속성 을 설명 하 며 이 block 을 호출 합 니 다. A 에서 이 block
  • 을 실현 합 니 다.
  • 2. B 대상 은 A 대상 에 게 뭔 가 를 알려 주 고 싶 습 니 다. B 에서 하나의 block 속성 을 설명 하고 이 block 을 호출 합 니 다. A 에서 이 block
  • 을 실현 합 니 다.
  • 대리 디자인 모델 의 정리:
  • 다른 사람의 행동 을 감청 하고 싶다 면 다른 사람의 block
  • 을 실현 해 야 한다.
  • 다른 사람 에 게 뭔 가 를 알려 주 고 싶다 면 하나의 block 속성 을 가지 고 다른 사람 이 당신 의 block
  • 을 실현 하도록 호출 해 야 합 니 다.
  • 대리 디자인 모델 의 개발 절차 (YYY 대상 이 XXX 대상 의 일부 행 위 를 감청 하거나 XXX 대상 이 YYY 대상 에 게 알려 주 고 싶 은 것)
  • 1. XXX 에서 block 속성 을 설명 합 니 다. @property (strong, nonatomic) ( ) (^block )( )
  • 2. 내부 에서 어떤 행위 가 발생 했 을 때 block 이 비어 있 는 지 판단 하고 비어 있 지 않 으 면 block
  • 을 호출 합 니 다.
  • 3. YYY 대상 이 이 block 을 실현 하면 됩 니 다.block = ^ ( ){ }
  • 반환 값 형식 이 비어 있 을 때 void 는 생략 할 수 있 습 니 다
  • 반환 값 이 있 을 때 반환 값 유형 을 생략 할 수 있 습 니 다
  • 매개 변수 가 없고 작은 괄호 도 생략 할 수 있다


  • block 의 몇 가지 용법
    에이전트 와 알림 의 차이
  • 대리: 한 대상 은 다른 대상 에 게 무슨 일이 일 어 났 는 지 만 알려 줄 수 있다
  • 알림: 1 개 대상 은 N 개 대상 에 게 무슨 일이 일 어 났 는 지 알려 줄 수 있다
  • KVC\KVO
  • KVC (Key Value Coding) 의 흔 한 역할: 모델 속성 에 값 부여
  • KVO (Key Value Observing) 의 상용 역할: 감청 모델 속성 값 의 변화
  • KVO 사용 절차
  • // cc   aa name     
    [aa addObserver:cc forKeyPath:@"name" options: NSKeyValueObservingOptionNew context:nil];
    
    // cc       
    /** *     object keyPath        */
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
        NSLog(@"   %@   %@       , %@", object, keyPath, change);
    }
    
    //    KVO     ,     
    - (void)dealloc{
        // aa       cc ,       name
        [aa removeObserver:cc forKeyPath:@"name"];
    }
    

    좋은 웹페이지 즐겨찾기