码迷,mamicode.com
首页 > 移动开发 > 详细

UIApplication和delegate代理

时间:2015-09-01 10:34:04      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

所有的移动操作系统都有个致命的缺点:app很容易受到打扰,比如一个来电或者锁屏都会导致app进入后台甚至被终止

还有很多其他类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这是UIApplication会通知他的delegate对象 让delegate对象来处理这些系统事件

常用的代理方法

@implementation AppDelegate

/**
 *  程序启动完毕就会调用
 */
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    return YES;
}

/**
 *  程序将要失去焦点的时候调用
 */
- (void)applicationWillResignActive:(UIApplication *)application {
   
}

/**
 *  程序进入后台的时候就会调用  一般在这里保存应用数据
 */
- (void)applicationDidEnterBackground:(UIApplication *)application {

}

/**
 *  程序进入前台就会调用
 */
- (void)applicationWillEnterForeground:(UIApplication *)application {
   
}

/**
 *  程序接收到内存警告时调用 一般在这里清楚不需要再使用的内存
 */
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{

}

/**
 *  被激活 获取到焦点的时候调用
 */
- (void)applicationDidBecomeActive:(UIApplication *)application {
    
}


@end

 

delegate:可以处理的系统事件包括:

  • 应用程序的生命周期事件 比如程序的启动和关闭
  • 系统事件 比如来电
  • 内存警告

应用程序一启动首先创建的第一个对象就是UIApplication

UIApplication是应用程序的象征 当我们创建一个项目时:系统已经帮我自动创建了代理 :AppDelegate

应用程序的启动过程:

技术分享

探究UIApplicationMain

main函数中执?行了?一个UIApplicationMain这个函数 • int UIApplicationMain(int argc, char *argv[], NSString

  • principalClassName, NSString *delegateClassName); ? argc、argv:直接传递给UIApplicationMain进?行相关处理即可
  •  principalClassName:指定应?用程序类名(app的象征),该类必须是UIApplication(或 ?子类)。如果为nil,则?用UIApplication类作为默认值
  • delegateClassName:指定应?用程序的代理类,该类必须遵守UIApplicationDelegate协 议
  • UIApplicationMain函数会根据principalClassName创建UIApplication对象,根 据delegateClassName创建?一个delegate对象,并将该delegate对象赋值给UIApplication对 象中的delegate属性
  • 接着会建?立应?用程序的Main Runloop(事件循环),进?行事件的处理(?首先会在程序完毕后调 ?用delegate对象的application:didFinishLaunchingWithOptions:?方法)
  • 程序正常退出时UIApplicationMain函数才返回

UIWindow

  • UIWindow是一种特殊的UIView通常在一个app中只会有一个UIWindow
  • ios程序启动完毕后 创建的第一个视图控件就是UIWindow,接着创建控制器View,最后将控制器的view添加到UIWindow上面 于是控制器的view就显示在屏幕上了
  • 一个IOS程序之所以能显示  完全是因为它有UIWindow
  • 也就是说没有UIWindow 就看不见任何UI界面

 

程序启动的完整过程


1.main函数


2.UIApplicationMain
* 创建UIApplication对象
* 创建UIApplication的delegate对象

3.delegate对象开始处理(监听)系统事件(没有storyboard)
* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
* 创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口

 

UIApplication和delegate代理

标签:

原文地址:http://www.cnblogs.com/syios/p/4774914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!