: UIKit이다.
: iOS Application의 cocoaTouch에서 User Interface를 구현하고 이벤트를 관리하는 프레임워크
https://github.com/iOS-SOPT-iNNovation/iOS_Traning/issues/10
Foundation Kit은 Cocoa Touch framework에 포함되어 있는 프레임워크 중 하나다. String, Int 등의 원시 데이터 타입과 컬렉션 타입 및 운영체제 서비스를 사용해 앱의 기본적인 기능을 관리하는 프레임워크이다.
iterator, jsonEncoder, jsonDecoder 과 같은 데이터 관련 클래스가 정의되어 있습니다.
iterator: 배열이나 그와 유사한 자료 구조의 내부의 요소를 순회(traversing)하는 객체이다.
jsonEncoder: 데이터 유형의 인스턴스에서 JSON 개체로 변환하는 객체
jsonDecoder: JSON 개체에서 데이터 유형의 인스턴스로 변환하는 객체
https://velog.io/@gnjs224/Foundation-Kit
: Cocoa Touch 어플리케이션은 UIApplication의 인스턴스가 main thread에 attach된다.
main thread는 UIApplication으로부터 만들어지고, UIApplication은 앱이 처음 시작될 때 인스턴스화 되는 앱의 첫 시작 부분이다.
UIApplication은 어플리케이션 run loop를 포함한 main event loop를 세팅하고이벤트 처리를 한다.
어플리케이션의 main event loop는 touch, gesture같은 모든 UI 이벤트들을 받는다.
어플리케이션 UI 이벤트는 UIApplication->UIWindow->UIViewController->UIView->subviews(UIButton,etc.) 와 같은 response chain에 따라 UIResponse에 전달된다.
UIResponder는 버튼 press, tap, 확대 축소, swipe 등의 UI 변경으로 인식되는 이벤트를 다룬다.
이러한 이벤트들이 main thread에서 발생하므로 응답자가 포함된 UIKit 프레임워크는 main thread에서 작동해야 한다.
main queue는 하나의 task가 끝나야 다음 task를 실행하는 serial queue이다.
그리고 sync는 task가 끝날 때까지 다음 task를 실행하지 않고 queue를 block한 뒤 task가 완료될 때까지 기다린다.
main.sync가 되면 queue가 block 상태가 되고 task가 끝날 때까지 기다린다. 하지만 main queue는 이미 block 상태이므로 task를 실행할 수 없다. deadlock
하지만 직접 serial queue를 만들어서 sync로 처리하면 잘 작동하는 것을 볼 수 있다.
main thread는 thread-safe하지 않기 때문이다.
모든 UIKit 관련 작업들이 thread-safe는 아니다. 일부분은 safe하고 일부분은 safe하지 않다.
thread-safe는 말 그대로 thread로부터 보호하는 것이다. main thread가 thread-safe하지 않는 것은 애플의 디자인 결정이라고 한다..
thread-safe로 thread를 만들면 성능 면에서 별로 좋지 않고, 오버 헤드가 커지기 때문이다.
결론적으로 UIKit이 main thread에 attach 되어 있으면 concurrent 프로그램을 작성하고 UIKit을 사용하는 것이 쉽다.
UIKit은 Thread-safe 하지 않습니다. 그래서 모든 처리를 Serial 하게 처리해야 합니다. 그래서 UI는 Main Thread 에서 synchronously 하게 동작해야 합니다.
당신이해야 할 일은 항상 UIKit에 대한 호출이 항상 main thread에서 이루어 지도록하는 것입니다. 따라서 UIKit 객체가 main thread에서 액세스되어야한다는 사실은, 성능에 유리하도록 한 apple의 디자인 결정입니다
그리고 많은 background thread 에서 UI를 update 하게 되면 각각의 스레드가 서로 다른 rendering 정보를 처리하기 때문에 많은 transaction 을 처리해야 합니다. 이러한 rendering 은 GPU가 처리할 수 없는 transaction 의 한계를 넘게 됩니다.
https://github.com/iOS-SOPT-iNNovation/iOS_Traning/issues/16
: 개발자가 생성하는 가장 일반적인 유형의 번들로, 어플리케이션의 성공적인 작동에 필요한 모든 것들을 저장한다. 구조는 어플리케이션 플랫폼이 iOS냐 MacOS냐에 따라 다르지만, 사용하는 방법은 동일하다.
앱 번들에는 Info.plist, 실행파일, 리소스 파일, 기타 서포트 파일 등이 포함되어있는데 각각 아래와 같은 역할을 수행한다.
어플리케이션에 대한 구성 정보가 들어있는 구조화된 파일로, 시스템은 이 파일에 의존하여 어플리케이션 및 파일에 대한 관련 정보를 식별한다.
모든 응용 프로그램에 존재하는 실행파일로 어플리케이션의 메인 entry point와 어플리케이션 타겟에 정적으로 연결된 모든 코드가 포함되어 있다.
리소스는 어플리케이션의 실행 파일 외부에 있는 데이터 파일이다. 리소스는 일반적으로 이미지, 아이콘, 소리, nib파일, 문자열 파일, 설정 파일 및 데이터 파일 등으로 구성된다. 대부분 localized될 수 있다.
커스텀 데이터 리소스 등이 포함 되어있다.
iOS의 번들 구조를 이해하면 사용자 지정 파일을 저장할 위치를 결정하는데 도움이 된다. iOS 어플의 번들 구조는 모바일 장치에 적합하게 이루어져 있다. 외부 디렉토리가 거의 없는 평평한 구조를 사용하여 디스크 공간을 절약하고 파일에 대한 접근과정을 간소화한다.
https://neph3779.github.io