IOS/iOS

[TIL] iOS의 구조

### iOS는 계층 구조로 이루어져 있습니다

# Core OS

  • 하드웨어와 가장 가까이 있는 최하위 계층

  • C기반의 저수준의 API로 이루어져 있음

  • 데이터처리, 네트워크, 파일 접근 등 한다고 볼 수 있음.

    시스템의 핵심 기능을 포함하는 기본적인 부분들을 관리

# Core Service

  • 시스템의 핵심 기능을 관리한 Core OS에서 제공하지 않는 부가기능들을 포함
  • 내부 데이터/위치/센서 등의 기능을 제공
  • CoreMotion(기기센서),Accounts(계정관리),Foundation(데이터 관리) 등의 기능 제공

# Media

  • 그래픽이나 오디오, 비디오 등 멀티미디어 기능을 제공
  • C와 Objective-C가 혼합되어 있는 상태
  • AvFoundation(미디어 재생관련),MediaPlayer(플레이어),Core Image(이미지 가공)등의 기능 포함

# Cocoa Touch

  • 화면의 그래픽 UI 및 터치의 기능을 제공
  • UIKit(UI구성, 터치), MapKit(지도),MessageUI(메세지, 이메일) 등의 기능 포함

### iOS의 장단점

장점

  • 명령이 기계로 전달되는 단계가 안드로이드에 비해 적으므로, OS의 속도가 빠르고 애니메이션 또한 매끄럽게 구동되어진다.
  • 앱을 설치할 수 있는 경로는 앱스토어가 유일하므로, 바이러스나 악성코드가 침투할 일이 비교적 적다.(보안에 유리)
  • 사용자가 꼭 필요한 기능만 담겨있으므로, 얻을 수 있는 가용 저장공간이 크다.
  • 심플하고 아름다운 UI, 고품격 음질, 정해져있는 포트의 위치와 크기, 자동 동기화 기능인 아이클라우드를 통한 완벽한 자동 백업기능

단점

  • 아이폰, 팟, 패드에만 설치할 수 있는 한정된 작동기기
  • 아이폰 용 앱 개발 프로그램은 맥 OS X에서만 작동되는 한정된 개발환경
  • 설계도는 설계자만이 볼 수 있고, 클로즈드 소스(프로그램의 설계도 소스를 비공개로 유지)이다.
  • 한정된 코덱 지원, 사용자 튜닝의 어려움

 

### 앱의 프로세스 구조 

1) 엔트리 포인트(UIApplicationMain) :

  • 내재적으로 존재하는 main()함수에서 UIApplicationMain를 호출(info.plist를 바탕으로 앱에 필요한 데이터와 객체 로드)

  • UIApplication객체 반환

  • AppDelegate객체 생성하고 UIApplication객체와 연결

    • AppDelegate.swift : iOS시스템은 앱을 실행할 때 @UIApplicationMain을 찾아가, 해당 클래스를 델리게이트로 지정
    • UIApplication은 앱 그 자체(생성한 객체, 앱의 기능 모두 이곳에 포함되어 있는 하위 객체)
    • AppDelegate(싱글톤)는 UIApplication으로부터 위임받은 일부 권한을 이용하여 상호작용하는 역할

2)  iOS12이하 앱의 라이프 사이클 : AppDelegate가 관리

  • Not Running (앱이 시작되지 않았거나 시스템에 의해 종료된 상태)

  • Inactive (앱이 실행 중, 이벤트를 받지 않은 상태)

  • Active (앱 실행 중, 이벤트 받은 상태)

  • Background (앱이 백그라운드에 있지만 코드가 실행되고 있는 상태)

  • Suspended (앱이 메모리에 남아있지만 실행되지 않은 경우)

3)  iOS13이상 앱의 라이프 사이클 : Scene에 의한 라이프 사이클

  • scene은 기기에서 실행중인 앱 UI의 한 인스턴스를 의미(사용자는 한 앱을 동시에 여러 개 실행 가능)
  • 유저는 각 앱에 대해 여러 Scene을 만들고 각 Scene마다 다른 상태가 될 수 있음
  • 하나의 앱은 여러개의 Scene을 갖을 수 있으며, 새로운 Scene을 만들어 달라고 요청하면 unattached상태로 만듦