zoukankan      html  css  js  c++  java
  • UIWindow与iOS的启动流程

    ios程序的入口,还是从main.m开始

    int main(int argc, char * argv[])

    {

     @autoreleasepool { 

    return UIApplicationMain(argc, argv, nil,

    NSStringFromClass([AppDelegate class]));

     }

    }

    NSStringFromClass([AppDelegate class])是指定去AppDelegate这个类中执行该实现的功能。

    UIApplicationMain()方法主要有个功能:

    1、创建应用程序的UIApplication对象;

    2、创建引用程序代理实例;

    3、建立事件循环(死循环),不断检测程序的运行状态,是否触摸,晃动。

    iOS执行过程:

    启动程序/前台(活跃状态)/将要结束(活跃状态)/进入后台(不活跃状态)/将要进入前台/前台(活跃状态)。

    这就是一个死循环,ios没有提供退出程序的机制,只有强制结束程序。

    window 相当于一个画板,要想展现自己想要的图像或者图形,需要把画的东西画在window这个画板上。window继承于UIView,在ui中,所有的能看得到的东西,都是继承于UIView。在iOS中,通常用UIWindow来表示窗口,每个app都要把要展现的东西都写在UIWindow上。通常,一个app只创建一个UIWindow对象。

    创建UIWindow对象

     

    #import "AppDelegate.h"

     

     

    以下是各个状态下执行的对应方法。

    // 当点击APP图标,开始讲屏幕的显示权交给我们的APP时 但是什么东西都没有显示的时候,会调用这个方法

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

     

    // 创建window对象,初始化时设置window的位置和大小与屏幕相同。

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

       

    //  x 指的是  离左边的距离   y指的是 离上边的距离  宽度  高度 是本身

        // bouns 和frame 的区别体现在起点上   frame相对于父控件的   bounds 标示自己的

        NSLog(@"x=%g , y=%g , width=%g , height=%g",self.window.frame.origin.x,self.window.frame.origin.y,self.window.frame.size.width,self.window.frame.size.height);

        // 给window设置背景颜色

        self.window.backgroundColor = [UIColor whiteColor];

       

        // 让我们的window显示

        [self.window makeKeyAndVisible];

     }

    //告诉delegate应用程序即将进入非活跃状态(暂停游戏、停止timer等)...

    - (void)applicationWillResignActive:(UIApplication *)application{}

    //告诉delegate应用程序已经进入了后台(存储用户数据、释放一些共享资源、停止timer等)...

    - (void)applicationDidEnterBackground:(UIApplication *)application{}

    //告诉delegate应用程序即将进入前台(取消所有进入后台时暂停的任务)...

     - (void)applicationWillEnterForeground:(UIApplication *)application{}

    //告诉delegate应用程序已经进入活跃状态(重新执行被暂停的任务)...

    - (void)applicationDidBecomeActive:(UIApplication *)application{}

    //当应用程序即将终止时调用。如果适当的话,保存数据。

    - (void)applicationWillTerminate:(UIApplication *)application{}

    解释:

    1、initWithFrame:[[UIScreen mainScreen] bounds],初始化window,使这个window跟屏幕一样大小。

    2、backgroundColor,设置背景色

    3、makeKeyAndVisible,把window设置成可显示的。

  • 相关阅读:
    PostgreSQL数据库((数据库类型介绍)
    postgreSQL(SQL语音操作数据库)
    postgreSQL数据库连接注意事项
    数据库
    Excel函数文本变E+显示怎么办
    无糖可乐不好喝
    通过 命令查看 linux桌面使用的是wayland 还是 X11
    Intel CPU的后缀含义
    互联网缩略语
    linux 下为windows交叉编译 ffmpeg库
  • 原文地址:https://www.cnblogs.com/Coder-GT/p/4865774.html
Copyright © 2011-2022 走看看