2016-06-06 5 views
0

UIApplicationDelegateapplication:didFinishLaunchingWithOptions: I가 다음 코드를 가지고UIWindow가 앱에서 만들어 질 때 UIApplication이 어떻게 알 수 있습니까? 에서는

NSLog(@"%d\n", [UIApplication sharedApplication].windows.count); 

self.mainWindow = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; 

NSLog(@"%d\n", [UIApplication sharedApplication].windows.count); 

(mainWindow 헤더에 선언 @property이다)

NSLog 프린트 아웃 0 번째 인쇄 1 동안.

UIApplication은 응용 프로그램에서 창을 만들고 초기화한다는 것을 알고 있습니까?

답변

1

소스 코드가 100 % 확실하지는 않지만 UIWindow의 이니셜 라이저가 작성되어 UIApplication에 작성되었음을 알리는 것으로 보입니다. 이는 애플이 두 클래스를 구현 한 것의 일부일 뿐이다.

+1

더 구체적으로 말하자면,'UIWindow' 클래스는 모든 윈도우가 이니셜 라이저에 추가 한 모든 윈도우의 배열을 유지하고'[UIApplication sharedApplication] windows]'는 UIWindow 클래스 메소드를 호출하여 그 배열을 필터링하고 반환합니다 . – dan

+0

@ 단 - 어떻게 알 수 있습니까? 그 중 누구도 공개 API에 없습니다. – rmaddy

+0

내가 구체적으로 무엇을했는지 궁금해서 호퍼와 UIKit을 분해했습니다. 분명히 그것은 언제든지 변경할 수 있고 의존 할 수없는 구현 세부 사항입니다. – dan

0

애플은 doc

응용 프로그램이 실행될

, 시스템은 UIApplicationMain 함수를 호출 말한다; 이 함수는 다른 작업 중 UIApplication 개체이라는 단일 개체를 만듭니다. 그런 다음 sharedApplication 클래스 메소드를 호출하여 객체에 액세스합니다. 앱의 애플리케이션 객체의 주요 역할은 들어오는 사용자 이벤트의 초기 라우팅을 처리하는 것입니다. 컨트롤 개체 (UIControl 클래스의 인스턴스)로 전달 된 작업 메시지를 적절한 대상 개체에 전달합니다. 응용 프로그램 개체는 열려있는 창의 목록을 유지 관리합니다. (UIWindow 개체) 및이를 통해 응용 프로그램의 UIView 개체를 검색 할 수 있습니다. 특정 기능을 찾고 있다면