티스토리 뷰

반응형

 

안녕하세요! 민군입니다. 오늘 좋은 팁을 하나 알아서 바로 포스팅을 써보게 되었습니다. 

iOS개발을 하다보면 NotificationCenter를 통해 노티를 사용할 수 있습니다. 특정이벤트를 감지해서 알려주는 옵저버기능인데요. 특정이벤트에 대한 다수의 뷰컨트롤러의 조작이 필요할때 유용한 것으로 알고 있습니다. 그 외로도 1대1 이벤트 대응방법으로는 Protocol을 통한 델리게이트 메서드를 사용할 수도 있지요. 

 

그런데 만약 "1대1용도로 사용을 하려한 하나의 노티피케이션 옵저버를 다수의 뷰컨트롤러에서 각각 등록한다면?"

이전 뷰 컨트롤러, AViewController에서 등록한 옵저버를 없애주지 않으면 B에서 같은 노티 옵저버를 등록시, AController와 BController 전부 노티피케이션에 대한 응답을 받게 되는 중복문제가 발생할 수 있습니다. 이를 해결할 수 있는 방법은? 간단합니다! 현재 사용하지 않는 뷰 컨트롤러의 옵저버는 잠시 제거(Remove) 해두는 것이겠죠! 그 부분을 주제로 포스팅 해보겠습니다.

 

♣︎ Swift Notification의 등록

특정 이벤트를 감지하기위해 사용하는 Notification(노티피케이션)은 위와같이 이름을 지정해 둘 수 있습니다. 

 

♣︎ Swift Notification 옵저버의 등록 및 제거(addObserver & removeObserver)

그 뒤에는 뷰컨트롤러 내에서 해당이름에 맞는 셀렉터메서드를 지정하지요. 여기서 셀렉터(Selector)메서드는 특정 이벤트에 노티피케이션이 반응 => 옵저버가 등록된 뷰컨트롤러로 노티피케이션을 발송(Post) 하면 호출이 되는 메서드가 되겠습니다.

앞서 말했던 상황, 1대1 대응 목적의 노티피케이션은 특정뷰를 사용할때에만 사용이 되어야 하지요. 그렇기때문에 쓰지않는 뷰컨트롤러에서는 옵저버가 계속 사용되면 안됩니다. 노티피케이션이 쓸데없이 중복사용이 될 수 있기때문이죠. 이를 해결하는 방법은 앱 생명주기 메서드를 사용하면 됩니다. 바로, viewDidLoad 초기화부에 옵저버를 등록하는 것 뿐만아니라 추가로 viewWillAppear, viewWillDisappear를 사용합니다.

 

 

노티피케이션 옵저버를 제거(removal)하기 위한 코드입니다. 매우 간단하게 NotificationCenter를 접근, 특정 옵저버 이름을 지정하여 제거하면 됩니다.

이제 removeNotification, setNotification 메서드를 viewWillAppear, viewWillDisappear에 적절하게 배치하면 됩니다.

 

 

♣︎ Swift Notification 옵저버의 등록, 제거할 위치 선정

viewDidLoad 초기화 메서드 이외에도 다시 특정 뷰컨트롤러가 사용이 될 예정일 때 setNotification() 메서드를 호출해 노티피케이션 옵저버를 등록합니다.

다시 특정 뷰컨트롤러가 사용되지 않을 예정일때, 뷰컨트롤러가 사라질 예정일때는 removeNotification() 메서드를 호출하여 노티피케이션 옵저버를 삭제합니다.

 

 

이렇게 하면 중복해서 노티피케이션 옵저버를 사용할 필요가 없는 뷰컨트롤러는 사용이 필요할때만 Notification 노티기능을 사용할 수 있게 됩니다. 아주 기본적인 사항이지만 알아두면 좋을 것 같습니다.

지금까지 중복 노티피케이션 사용 방지를 위해 간단한 iOS NotificationCenter 사용 간 주의사항에 대한 포스팅을 적어보았습니다. 지적사항이나, 조언 주시면 감사하겠습니다. 감사합니다 ^-^//

 

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함