UIApplication和delegate代理

所有的移动操作系统都有个致命的缺点: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
* 显示窗口

时间: 2024-10-07 19:59:24

UIApplication和delegate代理的相关文章

41-50(UIApplication和delegate,UIApplicationMain,UIWindow,程序启动的完整过程,控制器view的延迟加载)

41.UIApplication和delegate 42.UIPickerView 43.UIDatePicker 44.程序启动的完整过程 45.UIApplicationMain 46.UIWindow 47.如何创建一个控制器 48.控制器view的延迟加载 49.多控制器 50.UINavigationController的使用步骤 { 这几天一直在赶项目, 今天终于闲下来了! 今天是个好日子,空间里满天的2014520 那么来看看我们程序员的爱情吧! 爱情就是死循环,一旦执行就陷进去了

iOS开发之UIApplication和delegate

1.概述 所有的移动操作系统都有个致命的缺点:app很容易受到打扰.比如一个来电或者锁屏会导致app进入后台甚至被终止. 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件. delegate可处理的事件包括: (1)应用程序的生命周期事件(如程序启动和关闭) (2)系统事件(如来电) (3)内存警告 (4)… … 2.UIApplicationDelegate

【iOS [[UIApplication sharedApplication] delegate]】运用

之前想要拿到app的窗口,我们通常的写法是: [UIApplication sharedApplication].keyWindow 这种写法之前一直也觉得是正确的,没什么问题,而且网上大多数的博客或者资料中也是这样写的,但是最近在项目,发现这样写是不安全的,如果应用程序没有跳转,这种写法还算是可行的,但是如果应用程序出现了跳转(分享跳转到其他APP,访问系统相册等),这时返回原APP,你会发现加载原窗口上的视图位置会发生明显偏移,查阅了一些资料,发现如果写成 [[[UIApplication

OC中APPDelegate[[UIApplication shareApplication]delegate]]Swift实现

直接上代码: var myDelegate:AppDelegate? myDelegate = UIApplication.sharedApplication().delegate as? AppDelegate OC中APPDelegate[[UIApplication shareApplication]delegate]]Swift实现

iOS delegate, 代理/委托与协议.

之前知知道iOS协议怎么写, 以为真的跟特么java接口一样, 后来发现完全不是. 首先, 说说应用场景, 就是当你要用一个程序类, 或者说逻辑类, 去控制一个storyboard里面的label, 发现如果直接用 UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];//由storyboard根据myView的storyBoardID来

@protocol(协议)和@delegate(代理)的个人理解 通俗易懂

protocol:中文叫协议,一个只有方法体(没有具体实现)的类,Java中称作接口,实现协议的类必须实现协议中@required标记的方法(如果有的话): delegate:中文叫代理或委托,是一种设计模式.以协议的方式去体现(可以理解为协议的一种),区别在于代码中常以<xxxDeletgate>标示,以便清晰辨明此为代理. 下面以一个ViewController要绘制TableView来进行说明: 1.要绘制TableView,首先要实现两个协议 UITableViewDataSource

第七讲.NSDate,category(分类),extension(延展),protocol(协议),delegate(代理)

一.掌握NSDate和NSDateFormatter的使用 NSDate是Cocoa中?用于处理日期和时间的基础类,封装了某一给定的时刻(含日期,时间,时区). 了解NSDate的创建,如何计算当前时间,时间间隔,以及时间日期与字符之间的互转. 1>.NSDate创建,当地时间计算,时间按间隔计算,时间与字符之间的互转 练习题1:计算当前时间与一个固定时间按的时间差 练习二:字符串转化为日期对象 二.掌握Category的定义和使用(只能为类扩展类方法或实例方法) 1.主要作用是为:没有源代码的

ios delegate 代理模式 观察者模式 不同视图间的通信

delegate,在ios中比比皆是,NSURLConnection(网络请求有),tableView, connectionView,等系统自带 的常见代理.甚至,自己写代码的时候,随意间敲打出了protocol,根据需求,就出来了个delegate.其实也就是观察者模式的具体应用.基本的observer.一样的思想,就是创建一个抽象方法,到具体的视图控制器中才去实现.最常见的做法是:创建单例模式,然后,调用对象,设置代理对象,写具体的实现. NSNotification通知信号虽然也能达到同

关于delegate(代理)总结

stackoverflow  上讲解:http://stackoverflow.com/a/12660523/4563358 delegate是将需要处理交给自己的代理. 在自己的对应的类中.h文件中申明对应的delegate @class CSPopMenu; @protocol CSPopMenuDelegate <NSObject> @optional -(void)PopMenuDimiss:(CSPopMenu *)popMenu; @end 插入一个可选择的方法,定义一个协议. @