일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ios
- combine
- MVVM
- clean architecture
- tableView
- 애니메이션
- 리펙토링
- uitableview
- collectionview
- swiftUI
- map
- HIG
- Xcode
- RxCocoa
- uiscrollview
- ribs
- 리팩토링
- 리펙터링
- SWIFT
- rxswift
- Protocol
- UITextView
- 스위프트
- Refactoring
- swift documentation
- Observable
- 클린 코드
- Clean Code
- UICollectionView
- Human interface guide
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 2. iOS앱의 구조 및 cocoa touch 프레임워크 본문
1. 앱의 프로세스 구조
1) 엔트리 포인트(UIApplicationMain) :
-> 내재적으로 존재하는 main()함수에서 UIApplicationMain를 호출(info.plist를 바탕으로 앱에 필요한 데이터와 객체 로드)
-> UIApplication객체 반환
-> AppDelegate객체 생성하고 UIApplication객체와 연결
- UIApplication은 앱 그 자체(생성한 객체, 앱의 기능 모두 이곳에 포함되어 있는 하위 객체)
- AppDelegate(싱글톤)는 UIApplication으로부터 위임받은 일부 권한을 이용하여 상호작용하는 역할
2) iOS12이하 앱의 라이프 사이클 : AppDelegate가 관리
- Not Running (앱이 시작되지 않았거나 시스템에 의해 종료된 상태)
- Inactive (앱이 실행 중, 이벤트를 받지 않은 상태)
- Active (앱 실행 중, 이벤트 받은 상태)
- Background (앱이 백그라운드에 있지만 코드가 실행되고 있는 상태)
- Suspended (앱이 메모리에 남아있지만 실행되지 않은 경우)
3) iOS13이상 앱의 라이프 사이클 : Scene에 의한 라이프 사이클
- scene은 기기에서 실행중인 앱 UI의 한 인스턴스를 의미(사용자는 한 앱을 동시에 여러 개 실행 가능)
- 유저는 각 앱에 대해 여러 Scene을 만들고 각 Scene마다 다른 상태가 될 수 있음
- 하나의 앱은 여러개의 Scene을 갖을 수 있으며, 새로운 Scene을 만들어 달라고 요청하면 unattached상태로 만듦
2. 코코아 터치 프레임 워크
* 프레임워크 : 애플리케이션 제작을 빠르고 편라하게 할 수 있도록 미리 뼈대를 이루는 각종 코드를 제작하여 모아둔 것
- 코코아 터치 프레임 워크의 주 프레임워크 = UIKit + Foundation
1) 코코아 터치 프레임 워크 vs 코코아 프레임워크 : 코코아프레임워크로 만든것이 코코아 터치 프레임 워크
- 코코어 터치라는 것은 가장 상위계층이라는 의미(애플리케이션 프레임워크 계층)
2) 계층 구조
- Cocoa Touch(애플리케이션 프레임워크 계층). (코코아 터치 프레임 워크 속함. UIKit, GameKit...)
- Media (그래픽, 멀티미디어, 오디오)
- Core Service (GPS, 환경 설정)
- Core OS (커널, 파일시스템, 네트워크, 디바이스 드라이버)
* 앱을 따로 설치 안해도 디폴트로 설치되어 있는 "bundle-program"(bundle-application)들을 앱 내부에서 쉽게 확장할 수 있도록 제공하는 프레임워크를 "In-App Framework"라고하는데, 이 중 가장 많이 쓰는 것은 "cocoa framework"임
3. View Controller
1) Contents View Controller : 뷰에 콘텐츠를 표시하는 뷰 컨트롤러
2) Container View Controller : 콘텐츠 뷰 컨트롤러들을 연결해주는 뷰 컨트롤러 (네비게이션 컨트롤러, 탭 바 컨트롤러, 페이지 컨트롤러)
3) 뷰의 계층 구조
- Root View (Contents View)
4) 뷰 컨트롤러에 해당하는 클래스 : 아래 클래스(UIKit에 있는 것들)을 상속받아서 작성
- UIViewController
- UINavigationController
- UITableViewController
- UITaabbarController
- UISplitViewController
5) 뷰 컨트롤러의 생명주기 : Appearing -> Appeared -> Disappearing -> Disappeared
- Appearing : 뷰 컨트롤러가 화면에 등장하기 바로 직전까지의 상태
- Appeared : 화면 등장한 상태
- Disappearing
- Disappered
※ 이것을 이해하면 각 뷰 컨트롤러에서의 viewWIllAppear, viewDidDisAppear과 같은 메소드 사용 용이
4. 뷰의 layout 생명주기
cf) 일반적인 뷰 : viewWillAppear() -> viewDidAppear() -> viewWillDisappear() -> viewDidDisappear()
* 뷰 컨트롤러가 레이아웃을 설정하는 과정
-> viewWillLayoutSubviews()
-> 뷰 컨트롤러의 컨텐츠 뷰가 layoutSubviews() : 현재 정보를 가지고 레이아웃 배치, subview들도 동일한 메소드 호출
-> viewDidLayoutSubviews()
1) viewWillLayoutSubviews()
- 해당 뷰의 bounds*가 변하면 뷰는 subview들의 위치를 조정
- 용도 : 뷰 추가&제거, 뷰 크기 변경, 레이아웃 제약 변경, 뷰와 관련된 프로퍼티 갱신
* bounds : 자기 자신을 기준으로 위치나 크기를 나타낸 것
frame : super view를 기준으로 위치나 크기를 나타낸 것
해당내용 참고 : ios-development.tistory.com/111
2) layoutSubViews()
- 뷰의 크기 발생(Auto Layout) -> autoresizingMask프로퍼티를 설정하여 superview의 크기가 변경되었을 때 어떻게 대응할지 정의하는 곳
- 해당 뷰의 크기가 변경될 시 subview들에게 auto resizing동작을 적용하며, subview들에게 연쇄적으로 적용
3) viewDidLayoutSubviews()
- 레이아웃이 결정되고 나서 호출
- 용도 : tableView.reLoadData(), 다른 뷰들의 컨텐츠 갱신
참조 : developer.apple.com/documentation/uikit/uiviewcontroller
'iOS 기본 (swift)' 카테고리의 다른 글
[iOS - swift] 6. Delegate 패턴 활용 (ImagePicker) (0) | 2020.04.03 |
---|---|
[iOS - swift] 5. 메시지 전달 (alert, actionSheet) (0) | 2020.04.03 |
[iOS - swift] 4. 뷰 컨트롤러 간 데이터 전달 (0) | 2020.04.02 |
[iOS - swift] 3. 화면전환(present, navigation, segue) (0) | 2020.04.02 |
[iOS - swift] 1. MVC, Delegate, Interface Builder (1) | 2020.04.02 |