코드 한 줄에 대해 기록합니다. 의식의 흐름을 따라갑니다.
Timer에서 invalidate() 함수의 정의를 보면
타이머를 중지하고 loop에서 제거해주는 역할을 하는 함수
이라고 작성되어있다
지정된 타이머를 제거하는 유일한 방법이라고 한다
(참고로 timer = nil 한다고 이미 시작된 타이머가 초기화되진 않는다...^^ 하하)
근데 invalidate() 함수를 작성했는데도 타이머가 계속 진행되는 문제가 발생해서
왜일지 알아보았다
만약 timer.invalidate()를 실행했는데도 불구하고 타이머가 계속 실행이 된다면 두 가지 중 이유가 있을 텐데
1. 타이머가 중복돼서 실행된 경우
만약 타이머를 설정하는 코드가 2번 실행됐다면 timer.invalidate() 한다고 해서 2번이 모두 취소가 되는 게 아니라 1번만 취소가 되는 구조였다..!
그러니깐 꼭 중복돼서 코드가 실행되지 않는지 확인해봐야 한다
2. 타이머의 실행과 취소가 서로 다른 스레드 일 경우
이 경우가 제일 많을 것 같은데, 공식 문서를 보면 꼭 타이머를 설치한 스레드와 같은 스레드에서 보내야 한다고 쓰여있는 것을 확인했다
그렇기 때문에 1번의 이유도 아닌데 취소가 안된다고 하면 print(”\(Thread.current.threadName)”) 로 스레드를 확인해보는 것을 추천한다!
따봉 공식 문서야 고마워
2022년 4월 7일 코드한줄🍎 끗 -_-
'Develop > Swift' 카테고리의 다른 글
[Swift] WWDC22 Enhance voice communication with Push to Talk (1) | 2022.06.12 |
---|---|
[Swift/코드한줄] Print 문 프로퍼티 - separator, terminator (0) | 2022.05.06 |
[Swift/코드한줄] translatesAutoresizingMaskIntoConstraints = false (0) | 2022.01.16 |
[Swift] WWDC21 Get ready for iCloud Private Relay (0) | 2021.12.21 |
[Swift] WWDC21 Explore Nearby Interaction with third-party accessories (2) | 2021.09.14 |
Comment