개체를 알림 센터에 등록 할 수있는 더 좋은 곳이 있습니까?알림 수신자로 개체를 등록 하시겠습니까? - 성능 극대화!
다른 말로 표현하자면 init(), awakeFromNib() 또는 다른 이벤트 핸들러에 알림 수신기로 객체를 등록하는 것이 좋습니다.
감사합니다.
개체를 알림 센터에 등록 할 수있는 더 좋은 곳이 있습니까?알림 수신자로 개체를 등록 하시겠습니까? - 성능 극대화!
다른 말로 표현하자면 init(), awakeFromNib() 또는 다른 이벤트 핸들러에 알림 수신기로 객체를 등록하는 것이 좋습니다.
감사합니다.
코드가 작동 될 때까지 성능에 대해 걱정할 필요가 없으며 성능 문제를 관찰하고 측정 할 수 있습니다. 옵서버 등록은 매우 드물게 이루어 지므로 그렇게 할 때 중요한 성능 문제가 없어야합니다. 중요한 것은 게시 알림에 해시 조회가 포함되므로 알림에 등록 할 개체 수와 보내는 알림 수입니다.
다른 시간에 알림을 등록하면 눈치 챌 수있는 성능 차이는 없습니다. 내가 줄 수있는 유일한 충고는 가능한 짧은 기간으로 통지가 관찰되고있는 창을 좁히는 것입니다. 또한 관찰자를 한 번만 등록하십시오. 관찰자를 여러 번 등록하면 여러 알림을 받게됩니다.
알림의 성능에 관심이있는 이유는 무엇입니까? 측정을 통해 알림에 문제가 있음을 확인 했습니까?
또한 init 메소드 내에서 블록을 알림 핸들러로 사용할 때 매우주의해야합니다.
예를 들어 블록을 알림 처리기로 설정하여 클래스 속성 (예 :보기 컨트롤러의 managedObjectContext에서 didChangeNotification)에서 알림을 수신 할 수 있습니다. 이 경우 블록은 객체 인스턴스를 유지합니다. 즉, init 메소드가 retainCount를 두 번 증가 시켰습니다. 이 문제를 올바르게 관리하기 위해 릴리스를 재정의하지 않으면 클래스의 인스턴스를 유지하고 더 나빠질 수 있습니다.
따라서 알림 처리기, 특히 init 메소드에서 블록을 사용하는 데 매우주의해야합니다.
답변 해 주셔서 감사합니다. 네, awakeFromNib() 또는 다른 핸들러에 등록하는 대신 각 객체의 init() 메소드에 모든 알림을 등록하면 로딩 시간에 약간의 차이가 있음을 알았습니다! 누군가에게 기술적 인 설명이 있는지 물어 보았습니다! – BitDrink
BitDrink :별로. 차이점은'init'에서 할 때 UI가 나타나기 전에해야한다는 것입니다. 반면에 'awakeFromNib'에서 UI를 사용하면 UI의 일부 (일부)가 나타납니다. 관찰자를 추가하는 데 걸린 시간은 사라지지 않습니다. UI가 올라간 후로 이동합니다. 그것은 여전히 좋은 일이지만, 일반적으로해야 할 일입니다. –