【iOS】—— 앱 시작 프로세스

앱 시작 프로세스

콜드 스타트와 웜 스타트

콜드 스타트: 시작할 때 앱 프로세스가 시스템에 없으며 새 프로세스를 시작해야 합니다.
핫 스타트: 시작 시 앱 프로세스는 여전히 시스템에 있으므로 새 프로세스를 시작할 필요가 없습니다.

APP 완료 시작 프로세스

주로 세 단계로 나뉩니다.

  • main()함수 실행 전( pre-main단계)
  • main()기능 실행 후( main기능 실행부터 설정 self.window.rootViewController실행 완료까지)
  • 첫 번째 화면 랜더링 완료 후( self.window.rootViewController실행 완료부터 didFinishLaunchWithOptions메소드 범위 종료까지)

1. 메인 기능이 실행되기 전에 시스템이 수행할 작업:

  • 실행 파일을 로드합니다. (앱의 모든 .o 파일)
  • 동적 링크 라이브러리를 로드하고 리베이스 포인터 조정을 수행하고 심볼 바인딩을 바인드합니다.
  • ObjC 런타임 초기화. 포함 : ObjC 관련 클래스 등록, 카테고리 등록, 선택자 고유성 검사 등
  • 초기화. 포함: +load() 메서드 실행, attribute((생성자))로 장식된 함수 호출, C++ 정적 전역 변수 만들기 등
    여기에 이미지 설명 삽입
    앱이 시작되면 먼저 시스템 커널(Kernel)이 프로세스를 생성합니다.
    둘째, 실행 파일을 로드합니다. (실행 파일은 Mach-O 형식의 파일, 즉 App에 있는 모든 .o 파일의 집합을 말합니다.) 이때 dyld(dyld는 Apple의 동적 링커)의 경로를 얻을 수 있습니다.
    그런 다음 주로 4단계로 구분되는 dyld를 로드합니다.
    1. dylibs 로드: 이 단계에서 dyld는 애플리케이션이 의존하는 dylib를 분석하고 mach-o 파일을 찾고 이 파일을 열어 읽고 유효성을 확인합니다. 그런 다음 코드를 찾으십시오 서명이 커널에 등록되고 마지막으로 mmap()이 dylib의 각 세그먼트에 대해 호출됩니다.
    2. 리베이스/바인딩: 리베이스 포인터 조정을 수행하고 심볼 바인딩을 바인드합니다.
    3. ObjC 설정: 런타임 초기화. ObjC 관련 클래스 등록, 카테고리 등록, 선택자 고유성 검사 등 포함
    4. 이니셜라이저: 각 ObjC 클래스 및 분류의 +load 메서드를 호출하고 속성((생성자))으로 수정된 함수를 호출하고 C++ 정적 전역 변수를 생성합니다.

2. main 함수가 실행된 후:

주 기능 실행 후 단계는 주 기능 실행부터 appDelegate의 didFinishLaunchingWithOptions 메소드 중 첫 화면 렌더링 관련 메소드 완료까지를 말합니다.
즉, main 함수 실행부터 self.window.rootViewController 설정 완료까지입니다.
여기에 이미지 설명 삽입

3. 첫 번째 화면 렌더링이 완료된 후:

첫 번째 화면 렌더링이 완료된 후 단계는 첫 번째 화면 렌더링 후 모든 메서드 실행이 didFinishLaunchingWithOptions메서드 범위 내에서 실행됨을 의미합니다. 즉, 설정에서 메소드 범위 종료 까지 .

self.window.rootViewControllerdidFinishLaunchWithOptions

이 단계에서 첫 번째 화면이 렌더링되었습니다.

해야 할 일:

  • 첫 화면 표시에 필요하지 않은 일부 기능을 초기화합니다.
  • 메인 스레드를 최적화하고 메인 스레드를 먼저 차단하는 방법을 처리하여 사용자의 후속 작업에 영향을 미치지 않도록 합니다.

마하오

mach-oiOS/macOS바이너리 파일의 형식 이며 mach-o여러 가지 유형으로 나뉩니다. 이 문서에서는 일반적인 mach-o파일 형식과 차이점에 대해 설명합니다.
에서는 Xcode->Build Setting ->Mach-O Type다음 유형 중에서 선택할 수 있습니다.

  • Executable(제품은 ipa 패키지입니다)
  • Dynamic Library(제품은 동적 라이브러리입니다)
  • Bundle(상품은 번들 파일입니다)
  • Static Library(제품은 정적 라이브러리입니다)
  • Relocatable Object File(리디렉션 파일)

컴파일 및 링크 프로세스: 【iOS】——컴파일 및 링크

Supongo que te gusta

Origin blog.csdn.net/m0_62386635/article/details/132018355
Recomendado
Clasificación