소식 통지의 세 가지 방식 총결

5956 단어 iOS개발하다
알림은 우리가 낮은 정도의 결합 상황에서 컨트롤러가 임의의 대상과 통신하는 목적을 만족시킬 수 있도록 한다.이런 모델의 기본 특징은 다른 대상이 어떤 사건이 전달한 통지를 받을 수 있도록 하기 위해 주로 통지 명칭을 사용하여 통지를 보내고 받는 것이다.
두 개의 서브시스템이 직접적인 관계가 있으면 클로즈업, 에이전트 등 방법을 고려하여 값을 전달할 수 있다. 만약에 두 개의 서브시스템이 독립적이고 결합 관계가 없다면 이때는 또 다른 형식으로 Notification에 통지해야 한다.
통지의 장점과 단점
이점:
4
  • 코드를 얼마나 많이 작성하지 않아도 비교적 간단하게 실현할 수 있다

  • 4
  • 한 개의 알림에 대해 여러 대상이 반응을 하고 일대다 방식을 간단하게 실현할 수 있다.Delegate보다 더 큰 범위의 통신 메커니즘을 실현할 수 있다

  • 4
  • 매개 변수(object와userInfo)를 전달할 수 있고,object와userInfo는 알림을 보낼 때 전달하는 정보를 휴대할 수 있다

  • 단점:
    4
  • 번역 기간에 통지가 관찰자에게 정확하게 처리될 수 있는지 검사하지 않는다

  • 4
  • 통지한 관찰자를 석방할 때 통지센터에서 관찰자를 제거해야 한다

  • 4
  • 디버깅을 할 때 알림 전달 과정은 제어하고 추적하기 어렵다

  • 4
  • 통지를 보내고 받을 때 통지 이름을 미리 알아야 한다. 통지 이름이 일치하지 않으면 동기화되지 않을 수 있다

  • 4
  • 통지가 발송된 후 관찰자로부터 어떠한 피드백 정보도 얻을 수 없다

  • NSNotification 의 세 가지 활용 사례 분석:
    1. 알림을 보내고 파라미터를 전달하지 않는다.
    알림 보내기
    [[NSNotificationCenter defaultCenter] postNotificationName:@"notification1" object:nil];

    알림을 수신(수신)하려면 다음과 같이 하십시오.
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationEvent) name:@"notification1" object:nil];

    메소드 호출:
    - (void)notificationEvent
    {
        NSLog(@" ");
    }

    관찰자를 제거하려면 다음과 같이 하십시오.
    -(void)dealloc
    {
        // ,Observer nil
        [[NSNotificationCenter defaultCenter] removeObserver: self name:@"notification1" object: nil];
    }

    2. Object로 메시지 전달하기;
    알림 보내기
    [[NSNotificationCenter defaultCenter] postNotificationName:@"notification2" object:[NSString stringWithFormat:@"%@",self.titleLabel.text]];

    알림을 수신(수신)하려면 다음과 같이 하십시오.
    [[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(notificationEvent:) name:@"notification2" object: nil];

    메소드 호출:
    -(void)notificationEvent:(NSNotification *)noti
    {
        // object 
        NSString *info = [noti object];
        NSLog(@"  object :%@",info);
    }

    관찰자를 제거하려면 다음과 같이 하십시오.
    -(void)dealloc
    {
        // ,Observer nil
        [[NSNotificationCenter defaultCenter] removeObserver: self name:@"notification2" object: nil];
    }

    3. userInfo를 사용하여 메시지를 전달한다.
    알림 보내기
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:self.indexPath,@"indexPath",self.subCommentArray[indexPath.row].ID,@"replyID", nil];
    //  
    [[NSNotificationCenter defaultCenter] postNotificationName:@"showInputTitleViewAndRaiseCommentViewWhenReplyToReply" object:nil userInfo:dic];

    알림을 수신(수신)하려면 다음과 같이 하십시오.
    [[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(notificationEvent:) name:@"notification3" object: nil];

    메소드 호출:
    - (void)notificationEvent:(NSNotification *)noti
    {
        // userInfo 
        NSDictionary *dic = [noti userInfo];
        NSIndexPath *indexPath = [dic objectForKey:@"indexPath"];
        NSString *replyID = [dic objectForKey:@"replyID"];
    }

    관찰자를 제거하려면 다음과 같이 하십시오.
    -(void)dealloc
    {
        // ,Observer nil
        [[NSNotificationCenter defaultCenter] removeObserver: self name:@"notification3" object: nil];
    }

    참고: [[NSNotificationCenter default Center] removeObserver:] 방법은 시스템 알림을 제거하는 것입니다.

    좋은 웹페이지 즐겨찾기