티스토리 뷰
안녕하세요. 멍구입니다. ^-^.
오늘은 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) 버튼 중복 클릭을 허용 하되, 가장 최근 클릭 시점으로부터 특정 시간 이후 셀렉터(메서드) 동작을 필요로 할 때 사용할 수 있다.
'iOS 개발 > iOS 개발 팁' 카테고리의 다른 글
Xcode 팁, 단축키로 이전 커밋기록 변경사항 확인방법 (0) | 2021.08.10 |
---|---|
iOS 개발 간 SnapKit Cocoapods 라이브러리 설치, 사용방법 (0) | 2021.08.03 |
iOS UIView를 UIImage로 랜더링 변환하여 사용하는 방법 (0) | 2020.12.04 |
신입 개발자 준비할때 있으면 좋은 스펙, 경험 팁 정리 (6) | 2020.10.16 |
온라인 IDE repl로 간편하게 코딩테스트 알고리즘 문제풀기 (0) | 2020.10.07 |
- Total
- Today
- Yesterday
- 스위프트
- 알고리즘
- 개발자문서
- 프로토콜
- swift 문자열
- swift문제
- 컬렉션
- 부스트코스
- swift reduce
- publisher
- swift string
- createML
- 백준알고리즘
- 프로그래머스swift
- SwiftUI
- 백준swift
- 알고리즘문제
- Collection
- uikit
- CoreML
- swift언어
- ios
- 김프매매
- swift알고리즘
- Protocol
- Swift 알고리즘
- swift
- swift 기초
- 프로그래머스
- 자연어처리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |