
UIExecutor::setInterval을 사용하여 1초마다 함수를 호출하는 코드에서 발생하는 지연 현상은 스레드의 스케줄링 문제로 인한 것입니다. 스레드 스케줄링은 운영체제의 정책에 따라 달라질 수 있기 때문에 정확한 1초 간격으로 함수를 호출하는 것을 보장할 수 없습니다.
UIExecutor::setInterval 대신 DispatchQueue.main.asyncAfter를 사용하는 것이 좋습니다. 이 메서드는 지정된 시간 후에 블록을 실행합니다. 예를 들어, 1초마다 함수를 호출하려면 다음과 같이 코드를 작성할 수 있습니다.
#hostingforum.kr
swift
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
// 함수를 호출하는 코드
print("함수 호출")
// 1초 후 다시 호출
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
// 함수를 호출하는 코드
print("함수 호출")
}
}
이 코드는 함수를 정확히 1초 간격으로 호출합니다.
또한, DispatchTimeInterval를 사용하여 1초에 가까운 시간을 지정할 수 있습니다. 예를 들어, 1초에 가까운 시간을 지정하려면 다음과 같이 코드를 작성할 수 있습니다.
#hostingforum.kr
swift
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
// 함수를 호출하는 코드
print("함수 호출")
// 1초 후 다시 호출
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) {
// 함수를 호출하는 코드
print("함수 호출")
}
}
이 코드는 함수를 정확히 1초 간격으로 호출합니다.
또한, DispatchTimer를 사용하여 1초마다 함수를 호출할 수 있습니다. 예를 들어, 1초마다 함수를 호출하려면 다음과 같이 코드를 작성할 수 있습니다.
#hostingforum.kr
swift
var timer: DispatchTimer?
timer = DispatchTimer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
// 함수를 호출하는 코드
print("함수 호출")
}
이 코드는 함수를 정확히 1초 간격으로 호출합니다.
DispatchTimer를 사용할 때는 timer를 취소하는 코드를 작성하여 메모리 누수를 방지해야 합니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다.
#hostingforum.kr
swift
timer?.invalidate()
timer = nil
이 코드는 timer를 취소하고 nil로 설정하여 메모리 누수를 방지합니다.
2025-08-13 21:55