2009-11-10 5 views

답변

4

코드가 작동 될 때까지 성능에 대해 걱정할 필요가 없으며 성능 문제를 관찰하고 측정 할 수 있습니다. 옵서버 등록은 매우 드물게 이루어 지므로 그렇게 할 때 중요한 성능 문제가 없어야합니다. 중요한 것은 게시 알림에 해시 조회가 포함되므로 알림에 등록 할 개체 수와 보내는 알림 수입니다.

3

다른 시간에 알림을 등록하면 눈치 챌 수있는 성능 차이는 없습니다. 내가 줄 수있는 유일한 충고는 가능한 짧은 기간으로 통지가 관찰되고있는 창을 좁히는 것입니다. 또한 관찰자를 한 번만 등록하십시오. 관찰자를 여러 번 등록하면 여러 알림을 받게됩니다.

알림의 성능에 관심이있는 이유는 무엇입니까? 측정을 통해 알림에 문제가 있음을 확인 했습니까?

+0

답변 해 주셔서 감사합니다. 네, awakeFromNib() 또는 다른 핸들러에 등록하는 대신 각 객체의 init() 메소드에 모든 알림을 등록하면 로딩 시간에 약간의 차이가 있음을 알았습니다! 누군가에게 기술적 인 설명이 있는지 물어 보았습니다! – BitDrink

+0

BitDrink :별로. 차이점은'init'에서 할 때 UI가 나타나기 전에해야한다는 것입니다. 반면에 'awakeFromNib'에서 UI를 사용하면 UI의 일부 (일부)가 나타납니다. 관찰자를 추가하는 데 걸린 시간은 사라지지 않습니다. UI가 올라간 후로 이동합니다. 그것은 여전히 ​​좋은 일이지만, 일반적으로해야 할 일입니다. –

2

또한 init 메소드 내에서 블록을 알림 핸들러로 사용할 때 매우주의해야합니다.

예를 들어 블록을 알림 처리기로 설정하여 클래스 속성 (예 :보기 컨트롤러의 managedObjectContext에서 didChangeNotification)에서 알림을 수신 할 수 있습니다. 이 경우 블록은 객체 인스턴스를 유지합니다. 즉, init 메소드가 retainCount를 두 번 증가 시켰습니다. 이 문제를 올바르게 관리하기 위해 릴리스를 재정의하지 않으면 클래스의 인스턴스를 유지하고 더 나빠질 수 있습니다.

따라서 알림 처리기, 특히 init 메소드에서 블록을 사용하는 데 매우주의해야합니다.

관련 문제