developer tip

NSNotificationCenter 대 위임 (프로토콜 사용)?

optionbox 2020. 11. 10. 08:02
반응형

NSNotificationCenter 대 위임 (프로토콜 사용)?


그들 각각의 장단점은 무엇입니까?
구체적으로 어디에 사용해야합니까?


여기서 경험적인 규칙은 이벤트 알림을받을 클라이언트 수입니다. 주로 하나의 객체 인 경우 (예 : 뷰를 닫거나 버튼을 클릭했을 때 작동하거나 다운로드 실패에 반응하기 위해) 위임 모델을 사용해야합니다.

내 보낸 이벤트가 한 번에 많은 개체 (예 : 화면 회전, 메모리 사용량, 사용자 로그인 / 로그 아웃)에 관심이있을 수있는 경우 NSNotificationCenter.


그들의 목적은 다릅니다.

  • 알림은 발신자가 알 수없는 여러 수신자에게 메시지를 브로드 캐스트하는 데 사용됩니다.

  • 위임은 보낸 사람을 대신하는 알려진 단일받는 사람에게 메시지를 보내는 데 사용됩니다.


알림은 일반적으로 다른 스레드에서도 발생하는 변경 사항을 UI에 알리는 데 더 좋습니다. Apple의 문서는 안정성 및 성능상의 이유로 가능한 경우 스레드간에 델리게이트를 사용하지 않도록 강력히 권장합니다. Mac에서는 바인딩을 사용하는 것이 좋지만 iPhone에는 없으므로 알림이 차선책 일 것입니다.


성능을 고려하는 것은 좋은 생각입니다 (알려진 개체 수가 적을 때는 위임이 더 좋고, 개체 수가 많을 때는 알림 센터가 더 좋습니다, 아니면 프로파일 러를 실행합니까?). Objective-C에 대해 이야기하고 있기 때문에 더 중요한 요소라고 생각합니다. C로 작성 될 가능성이있는 코드베이스의 정말 고성능 부분에 대해 이야기 할 가능성이 적기 때문에 모듈 간의 컴파일 시간 종속성이 줄어 듭니다.

단일 델리게이트가 아닌 델리게이트 배열을 갖는 것을 막을 수는 없습니다.

내가 만든 네트워크 스택 구성 요소와 사용자 지정 장치 상태 모니터링 인터페이스의 상태에만 NSNotificationCenter를 사용할 수 있습니다. 그러나 대부분의 커플 링은 앱의 글로벌 상태와 관련이 없기 때문에 대부분의 경우 Objective-C에서 일반 인터페이스 계약을 사용하는 것이 더 명확하고 NSNotificationCenter를 사용하는 것보다 뒤 따르는 사람들을 위해 더 쉽게 찾을 수 있다고 생각합니다. 사실 저는 내 사용자 지정 이벤트에 NotificationCenter를 사용한 적이 없으며 내 코드를 읽는 다른 사람이 코드를 쉽게 이해할 수 있도록 대리자를 사용하는 것을 선호합니다.

그리고 마지막으로 표준 API에 대한 알림을 사용하는 경우 선택의 여지가 없으며 주어진 이벤트에 대해 Apple이 규정 한 두 가지 방법 중 하나를 사용해야합니다.


알림은 UI 구성 요소를 분리하는 데 더 좋습니다. 컨트롤러 나 모델을 수정하지 않고도 모든 뷰를 연결할 수 있습니다. 느슨하게 결합 된 디자인에 확실히 더 좋습니다.

그러나 위임과 알림 간의 성능을 위해 호출 빈도를 고려해야합니다.

더 빈번한 이벤트에는 위임이 더 좋을 수 있으며, 이벤트는 덜 자주 발생하지만받는 사람이 많을 때는 알림이 더 좋습니다. 무엇을 골라야할지는 프로젝트에 달려 있습니다.


이 둘 사이의 옵션은 NSNotificationCenter. 여기 에서 내 Objective-C 구현을 살펴보십시오 .

참고 URL : https://stackoverflow.com/questions/1927965/nsnotificationcenter-vs-delegation-using-protocols

반응형