티스토리 뷰

반응형

 

 

 

안녕하세요. 멍구입니다. ^-^.

오늘은 iOS개발을 하다가 필요한 내용이 될만한 내용을 가져왔습니다.

 

바로, 오늘 소개할 주제는 특정 메서드를 지연 호출해야하는데, 중복 호출은 방지하고 싶을 때 사용할 수 있는 방법입니다.

NSObject의 타입메서드, 멤버메서드를 활용해서 간단하게 구현할 수 있습니다. 바로 설명 가보겠습니다. 

 

 


지연 호출 메서드 중복 호출 방지, 이전 지연 동작 취소방법

상황은 이렇습니다. 특정 셀렉터, 메서드를 동작시키려합니다. 해당 메서드는 특정 시간(가령 3초) 이후에 동작을 시키고 싶어요. 그런데, 중복 호출이 될 수 있잖아요? 이럴때는 기존의 지연 호출 예정이던 작업은 취소하고, 최근 딜레이 시간을 다시 초기화 하고 싶은 상황입니다. 

 

예를 들어보자면, 특정 버튼을 누르면 A 메서드를 2초 후 호출되도록 했는데, 다시 2초가 되기 전에 버튼을 누르면 이전의 작업은 취소하고, 다시 2초 후 호출이 되도록 하는 것입니다. 중복 호출을 방지하는 것이죠. 

 

이때 사용할 수 있는 방법을 공유드리겠습니다. 

swift의 많은 기능은 Objective-C를 기반이 되어 만들어졌다보니 이에 연관되는 경우가 많습니다. 가령, UIButton의 이벤트 타겟을 추가할때 타겟 메서드, 즉 셀렉터를 지정해주는 경우에 해당 셀렉터 메서드는 @objc 를 명시해주어야 하죠. 

 

 

 

 

NSObject의 타입메서드 중, ccancelPreviousPerformRequests가 있습니다. 해당 타입메서드를 사용하면 타겟과 셀렉터를 설정해서 해당 메서드 작업을 취소할 수 있습니다.

 

 

self.perform 메서드는 다시 이전의 특정 셀렉터 작업을 취소하고, 다시 3초 이후에 해당 메서드를 동작시키도록 하는 코드입니다.

perform 메서드는 NSObject의 멤버 메서드로 특정 셀렉터 동작을 실행할 때 사용할 수 있습니다.

여기에서 self는 UIViewController이며, NSObject를 상속받는 객체입니다.

 

 

 

동작 방식을 다시한번 정리하자면 이렇습니다.

1. NSObject.cancelPreviousPerformRequests ... : 이전의 셀렉터 동작을 취소한다.

2. perform ... : 셀력터 동작을 다시 설정 후 실행한다. 

 

이렇게 특정 작업을 중복 실행하는 것을 방지하고, 메서드 지연 실행이 가능해집니다. 특정 시간 동안 중복된 메서드 호출을 방지해야할 때 유용하게 사용할 수 있겠습니다.

 

위에 소개드립 NSObject 관련 메서드 기능들은 매우 오래된 API 기능으로, 이보다 더 좋은 방법은 찾아보면 많을 수 있습니다. 하지만 알아둬서 나쁠건 없다는 생각입니다. 😊 

 

 

 


지금까지 지연 호출 메서드 중복 호출 방지, 이전 지연 동작 취소방법 에 대해서 알아봤습니다.

아래에 코드 첨부드리고 간만의 포스팅을 마치겠습니다. 관련해서 의견이나 피드백 있다면 환영입니다. 즐 코딩하세요~ 

 

 

NSObject 메서드 활용, 지연 호출메서드 중복 호출 방지하는 방법 코드예시 ▼

// 특정 셀렉터 메서드를 지연 동작시켜야 하는데, 중복 호출을 방지해야할 때,
// -> NSObject 타입 메서드인 cancelPreviousPerformRequests를 사용할 수 있다.
// -> 특정 시간 이후 셀렉터 동작을 실행하고 싶으면 NSObject의 perform메서드를 활용할 수 있다.
        
// 1) 이전의 selectorMethod 셀렉터 동작을 취소한다.
NSObject.cancelPreviousPerformRequests(withTarget: false, selector: #selector(selectorMethod), object: nil)

// 2) 3초 후에 다시 selectorMethod 셀렉터 동작을 작동 시킨다.
self.perform(#selector(selectorMethod), with: nil, afterDelay: 3.0)
        
// ex) 버튼 중복 클릭을 허용 하되, 가장 최근 클릭 시점으로부터 특정 시간 이후 셀렉터(메서드) 동작을 필요로 할 때 사용할 수 있다.

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함