IOS 개발 학습 - 프로그램 시작 원리

6143 단어 objective-cios
요점 파악
Info.plist pch     

UIApplication     

AppDelegate     

UIApplication、AppDelegate、UIWindow、UIViewController   

iOS         

2. info.plist와 pch 파일의 흔한 설정
프로젝트를 만들면 Supporting files 폴더 아래에 프로젝트 이름 - Info.plist 라는 파일이 표시됩니다. 이 파일은 프로젝트를 실행하는 동안 매우 중요하기 때문에 삭제할 수 없습니다.
이전 버전의 Xcode에서 만든 프로젝트에서 이 프로필의 이름은 "Info.plist"이다
프로젝트 중 다른 Plist 파일에는 "Info"라는 단어가 있을 수 없습니다. 그렇지 않으면 전설에서 매우 중요한 "Info.plist"로 오인될 수 있습니다.
프로젝트에 InfoPlist가 하나 더 있습니다.strings 파일, Info.plist 파일의 로컬화 관련
Info.plist
일반 속성 (빨간색 부분은 텍스트 편집기로 열 때 보이는 키)
  • Localiztion native development region(CFBundle Development Region) - 현지화 관련
  • Bundle display name(CFBundle Display Name) - 프로그램 설치 후 표시되는 이름은 10-12자로 제한되며 초과할 경우 약어 이름
  • 이 표시됩니다.
  • Icon file(CFBundleIconFile)-app 아이콘 이름, 일반적으로 Icon.png
  • Bundle version(CFBundle Version) - 앱의 버전 번호, 앱스토어에 새로운 버전을 발표할 때마다 이 버전 번호를 추가해야 한다
  • Main storyboard file base name(NSMainStoryboard File) - 마스터 storyboard 파일의 이름
  • Bundle identifier(CFBundle Identifier) - 프로젝트의 유일한 표식으로 실제 컴퓨터에 배치할 때 사용
  • pch 파일
    프로젝트의 Supporting files 폴더 아래에는 프로젝트 이름 - Prefix.pch 파일이 있고 헤더 파일입니다.
    pch 헤더 파일의 내용은 프로젝트의 다른 모든 원본 파일에 공유되고 접근할 수 있습니다
    일반적으로 pch 파일에서 전역 매크로를 정의합니다
    pch 파일에 다음 예처리 명령을 추가한 후 프로젝트에서 로그 정보를 출력하려면 로그 정보를 사용할 때 NSLog 문장을 한꺼번에 제거할 수 있습니다. (디버그 모드에서 정의된 DEBUG가 있어야 합니다.)
    #ifdef DEBUG
    
    #define Log(...) NSLog(__VA_ARGS__)
    
    #else
    
    #define Log(...) /* */
    
    #endif

    UIApplication
    UIApplication 객체는 애플리케이션의 상징
    각 애플리케이션마다 고유한 UIAPplication 객체가 있으며 단일 인스턴스
    이 단일 객체는 [UIApplication sharedApplication]에서 사용할 수 있습니다.
    iOS 프로그램을 시작한 후 작성되는 첫 번째 객체는 UIAPplication 객체입니다.
    UIApplication 객체를 사용하여 일부 어플리케이션 수준의 작업을 수행할 수 있습니다.
    UIApplication의 일반 속성
    응용 프로그램 아이콘의 오른쪽 위 모서리에 빨간색 알림 숫자를 설정합니다.
    @property(nonatomic) NSInteger applicationIconBadgeNumber;

    네트워킹 표시기의 가시성 설정
    @property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;

    iOS7의 상태 표시줄
  • iOS7부터 2가지 관리 상태막대 제공
  • UIViewController를 통해 관리(각 UIViewController는 서로 다른 상태 표시줄을 가질 수 있음)
  • UIApplication을 통해 관리(한 어플리케이션의 상태 표시줄을 모두 관리함)
  • iOS7에서 기본적으로 상태막대는 UIViewController가 관리하고, UIViewController는 다음과 같은 방법으로 상태막대의 가시성과 스타일을 쉽게 관리할 수 있다
  • 상태 표시줄 스타일
    - (UIStatusBarStyle)preferredStatusBarStyle; 

    상태 표시줄 가시성
    - (BOOL)prefersStatusBarHidden; 

    상태 표시줄 관리를 위한 UIAPplication
    UIApplication을 사용하여 상태 표시줄을 관리하려면 먼저 Info를 수정해야 합니다.plist 설정
    openURL:
    UIApplication에는 강력한 OpenURL:메서드가 있습니다.
    - (BOOL)openURL:(NSURL*)url;

    openURL: 방법의 일부 기능은
    전화를 걸다
    UIApplication *app = [UIApplication sharedApplication];
    
    [app openURL:[NSURL URLWithString:@"tel://10086"]];

    - 문자 보내기
    [app openURL:[NSURL URLWithString:@"sms://10086"]];

    - 메일 보내기
    [app openURL:[NSURL URLWithString:@"mailto://[email protected]"]];

    - 웹 에셋 열기
    [app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];

    - 다른 앱 열기
    UIApplication *app = [UIApplication sharedApplication];

    4. UIAPplication 및 delegate
    모든 모바일 운영체제는 앱이 방해받기 쉽다는 치명적인 단점을 가지고 있다.예를 들어 전기가 오거나 스크린을 잠그면 앱이 백스테이지에 들어가거나 정지될 수도 있다.
    또 많은 다른 유사한 상황으로 인해 app가 방해를 받을 수 있다. app가 방해를 받을 때 시스템 이벤트가 발생할 수 있다. 이때 UIApplication은 이 시스템의 delegate 대상을 알려주고delegate 에이전트가 이 시스템 이벤트를 처리하도록 한다.
    delegate에서 처리할 수 있는 이벤트는 다음과 같습니다.
    프로그램의 생명주기 이벤트(예를 들어 프로그램 시작 및 닫기)
    시스템 이벤트 (예: 전화)
    메모리 경고
    … …
    UIApplicationDelegate 프로토콜
    // app          
    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
    
    // app       (    home )
    - (void)applicationDidEnterBackground:(UIApplication *)application;
    
    // app       
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

    UIApplicationDelegate
    프로젝트를 새로 만들 때마다 "AppDelegate"라는 단어가 있는 클래스가 있습니다. 이것은 UIAPplication의 에이전트입니다.
    MJAPPDelegate는 기본적으로 UIApplicationDelegate 프로토콜을 준수하고 있으며 UIApplication의 에이전트가 되었습니다
    iOS 프로그램 시작 프로세스
    UIApplicationMain 함수에서 UIApplicationMain이 실행되었습니다.
    int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

    argc,argv:UIApplicationMain에 직접 전달하여 관련 처리를 진행하면 됩니다.
    principalClassName: 프로그램 클래스 이름 (app의 상징) 을 지정합니다. 이 클래스는 UIApplication (또는 하위 클래스) 이어야 합니다.nil 인 경우 기본값으로 UIAPplication 클래스 사용
    delegateClassName: 응용 프로그램의 프록시 클래스를 지정합니다. 이 클래스는 UIAPplicationDelegate 프로토콜을 준수해야 합니다.
    5. UIWindow
    1. UIWindow는 특수한 UIView로 보통 한 앱에 하나의 UIWindow만 있다
    2. iOS 프로그램이 시작된 후 첫 번째 보기 컨트롤은 UIWindow입니다. 이어서 컨트롤러의view를 만들고 마지막으로 컨트롤러의view를 UIWindow에 추가합니다. 그래서 컨트롤러의view가 화면에 표시됩니다.
    3. iOS 프로그램이 화면에 나타나는 이유는 UIWindow 때문이다.
    4. UIWindow가 없으면 UI 인터페이스가 보이지 않는다는 뜻이다
    UIWindow에 UICView를 추가하는 일반적인 방법:
    UIView를 UIWindow에 추가하는 일반적인 방법은 다음과 같습니다.
    - (void)addSubview:(UIView *)view;

    뷰를 UIWindow에 직접 추가하지만 뷰에 대응하는 UIViewController는 아랑곳하지 않습니다
    @property(nonatomic,retain) UIViewController *rootViewController;

    루트ViewController의view를 UIWindow에 자동으로 추가하여 루트ViewController의 생명주기 관리를 담당합니다
    상용 방법
    - (void)makeKeyWindow;

    현재 UIWindow를 keyWindow(기본 창)로 변경
    - (void)makeKeyAndVisible; 

    현재 UIWindow를 keyWindow로 변경하여 표시
    UIWindow의 획득
    [UIApplication sharedApplication].windows

    이 응용 프로그램에서 열린 UIWindow 목록을 사용하면 응용 프로그램의 UIView 객체에 액세스할 수 있습니다.
    (평소 입력한 텍스트 팝업 키보드가 새 UIWindow에 있음)
    [UIApplication sharedApplication].keyWindow

    키보드와 터치 클래스가 아닌 메시지 이벤트를 수신하는 데 사용되는 UI Window입니다. 프로그램에서 매 순간 하나의 UI Window가 키 Window일 수 있습니다.만약 어떤 UIWindow 내부의 텍스트 상자에 텍스트를 입력할 수 없다면, 아마도 이 UIWindow가 키Window가 아니기 때문일 것이다
    view.window
    UIView가 있는 UIWindow 가져오기
    4대 대상 관계도

    좋은 웹페이지 즐겨찾기