iOS/코드조각

[iOS, Swift] RunLoop 사용하기

검은참깨두유vm 2023. 3. 15. 21:45
반응형

iOS 15.5, Xcode 13.31, Swift 5, UIKit 환경에서 진행했습니다.

 

RunLoop은 iOS 애플리케이션에서 이벤트 처리를 위한 핵심 메커니즘 중 하나입니다. 이 메커니즘은 쓰레드를 대기 상태로 만들거나, 타이머를 실행하거나, 입출력 이벤트를 처리하는 데 사용됩니다.
RunLoop은 앱의 UI 쓰레드를 유지하면서 동시에 다른 쓰레드에서 작업을 처리할 수 있도록 해줍니다. UI 쓰레드에서 사용자 입력을 처리하면서 백그라운드 쓰레드에서 네트워크 작업을 처리할 수 있습니다.
RunLoop은 기본적으로 이벤트 루프로 구성되어 있으며, 이벤트가 발생할 때까지 대기합니다. 이벤트가 발생하면 해당 이벤트를 처리하고 다시 대기 상태로 돌아갑니다. RunLoop 클래스를 사용하여 이벤트 루프를 만들 수 있으며, 이 클래스는 iOS 애플리케이션에서 기본적으로 사용되는 클래스 중 하나입니다.
RunLoop을 활용하는 방법 중 하나는 타이머를 사용하는 것입니다. 타이머를 사용하여 주기적으로 코드를 실행하거나 지정된 시간에 코드를 실행할 수 있습니다. 또한, RunLoop를 사용하여 백그라운드 쓰레드에서 실행되는 작업을 앱의 UI 쓰레드에서 처리할 수 있습니다.

 

var isFinish = false

export.exportAsynchronously {
	isFinish = true
    completion()
}

while !isFinish {
	RunLoop.current.run(mode: .default, before: Date.distantFuture)
}

백그라운드 쓰레드에서 돌아갈 때는 버튼 클릭이나 이벤트가 실행되지 않을 수 있다.

이럴 때 RunLoop를 사용하면 된다.

반응형