UIKit 은 iOS, iPadOS, 또는 tvOS 앱의 핵심 인프라를 구성하는 데 사용할 수 있는 다양한 구성 요소를 제공하여 앱을 빌드하는 데 필요한 여러 기능을 지원합니다.
제공하는 기능
1. 윈도우와 뷰 구조: UI를 구현하기 위한 구조
2. 이벤트 처리 인프라: 입력을 앱으로 전달하기 위한 구조
3. 메인 런 루프: 사용자, 시스템, 그리고 앱 간의 상호작용을 관리하는 구조
이 외에도 여러 기능과 정보를 제공합니다.
또한, UIKit은 SwiftUI와 원활하게 작동하므로, UIKit 앱의 일부를 SwiftUI로 구현하거나 두 프레임워크 간에 인터페이스 요소를 혼합하여 사용할 수 있습니다.
예를 들어, UIKit 뷰와 뷰 컨트롤러를 SwiftUI 뷰 내에 배치하거나 그 반대로도 가능한 경우가 그 예시가 될 수 있겠네요. ( 이 부분에 대해서는 한번 찾아보고 공부해보고 싶네요 ㅎㅎ)
UIKit클래스는 해당 클래스의 문서에서 별도로 명시하지 않는 한, 앱의 메인 스레드 또는 메인 디스패치 큐에서만 사용해야 합니다. 이 제한은 특히 UIResponder를 상속하는 클래스나 앱의 사용자 인터페이스를 조작하는 모든 클래스에 적용됩니다.
저는 "UIKit 클래스는 해당 클래스의 문서에서 별도로 명시하지 않는 한"이라는 조건이 이해가 되지 않았습니다. 당연히 UIKit은 메인 스레드에서만 작동해야 한다고 생각했기 때문입니다.
이 조건의 의미는 UIKit의 대부분 클래스가 메인 스레드에서만 안전하게 작동하도록 설계되었지만, 일부 클래스나 메서드는 문서에서 특별히 비동기 사용이 허용되었거나, 메인 스레드에서만 동작하지 않아도 되는 예외 사항이 존재한다는 것입니다. 이 부분에 대해서는 잘 모르고 있었습니다.
예를 들어, UIImage 같은 클래스는 모든 스레드에서 이미지 처리가 가능하다고 명시되어 있습니다.
"The immutable nature of image objects also means they're safe to create and use from any thread."
이처럼 문서에 별도로 백그라운드 스레드에서도 사용할 수 있다고 명시된 클래스나 메서드가 있으면, 해당 경우에는 메인 스레드가 아닌 곳에서도 사용할 수 있을거 같습니다.
https://developer.apple.com/documentation/uikit
'iOS > UIKit' 카테고리의 다른 글
| [UIKit] ViewController의 생명주기 (0) | 2025.01.11 |
|---|---|
| [UIKit] Preparing your UI to run in the foreground (0) | 2025.01.10 |
| [UIKit] 공식문서로 App의 LifeCycle 관리에 대해 알아 보자구요 (0) | 2025.01.10 |
| [UIKit] MVC패턴을 이용해 TableView를 만들어 보자 (0) | 2024.12.18 |
| [UIKit] 코드베이스 세팅하는 방법 (0) | 2024.12.16 |