UIApplication代理方法
来源:互联网 发布:mac应用程序不能打开 编辑:程序博客网 时间:2024/06/03 20:23
UIApplication的核心作用是提供了iOS程序运行期间的控制和协作工作。
每一个程序在运行期必须有且仅有一个UIApplication(或则其子类)的一个实例。回想一下我在前面的文章“main函数研究”的文章中提到的main函数的代码,可以看出,在程序开始运行的时候,UIApplicationMain函数是程序进入点,这个函数做了很多工作,其中一个重要的工作就是创建一个UIApplication的单例实例。在你的代码中你,你可以通过调用[UIApplication sharedApplication]来得到这个单例实例的指针。
UIApplication的一个主要工作是处理用户事件,它会维护一个队列,把所有用户事件都放入队列,逐个处理,在处理的时候,它会发送当前事件到一个合适的处理事件的目标控件。此外,UIApplication实例还维护一个在本应用中打开的window列表(UIWindow实例),这样它就可以接触应用中的任何一个UIView对象。UIApplication实例会被赋予一个代理对象,以处理应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警告)等等。
新建一个任意类型的iOS应用工程,在ClassPrefix输入是TC,我们可以看到工程中生成一个类:
TCAppDelegate:UIResponder
这里这个类的基类是UIResponder,和4.2以前生成的工程是不同的,以前是继承自NSObject。不论如何,本类实现了一个名叫UIApplicationDelegate的接口,这个表明这个类就是这个工程中UIApplication实例的代理类。
在main函数中,
@autoreleasepool
可以通过如下代码获UIApplication代理对象:
TCAppDelegate
在UIApplication接收到系统事件和生命周期事件时,会把相应的事件传递给UIApplicationDelegate进行处理,下表所列的生命周期函数大都是可选的,但为了应用程序的健壮性程序员应该实现它们。
UIApplicationDelegate Event-Handling Methods
Method Signature
1:application:didChangeStatusBarFrame:
- (void)application:(UIApplication*)applicationdidChangeSetStatusBarFra
2:application:didChangeStatusBarOrient
- (void)application:(UIApplication*)applicationdidChangeStatusBarOrient
3:application:handleOpenURL:
- (BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url
4:application:willChangeStatusBarOrien
- (void)application:(UIApplication*)applicationwillChangeStatusBarOrien
(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration
5:application:willChangeStatusBarFrame
- (void)application:(UIApplication)applicationwillChangeStatusBarFrame
6:applicationDidBecomeActi
- (void)applicationDidBecomeActi
7:applicationDidFinishLaun
-(void)applicationDidFinishLaun
8:applicationDidReceiveMem
-(void)applicationDidReceiveMem
9:applicationSignificantTi
-(void)applicationSignificantTi
10:applicationWillResignAct
- (void)applicationWillResignAct
11:applicationWillTerminate
- (void)applicationWillTerminate
1. – (void)applicationDidFinishLaunching:(UIApplication *)application;
此方法基本已经弃用,改用第2个方法代替。
2. – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0);
当应用程序启动时(不包括已在后台的情况下转到前台),调用此回调。launchOptions是启动参数,假如用户通过点击push通知启动的应用,这个参数里会存储一些push通知的信息。
3. – (void)applicationDidBecomeActive:(UIApplication *)application;
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
当应用程序全新启动,或者在后台转到前台,完全激活时,都会调用这个方法。如果应用程序是以前运行在后台,这时可以选择刷新用户界面。
4. – (void)applicationWillResignActive:(UIApplication *)application;
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
当应用从活动状态主动到非活动状态的应用程序时会调用这个方法。这可导致产生某些类型的临时中断(如传入电话呼叫或SMS消息)。或者当用户退出应用程 序,它开始过渡到的背景状态。使用此方法可以暂停正在进行的任务,禁用定时器,降低OpenGL ES的帧速率。游戏应该使用这种方法来暂停游戏。
调用时机可能有以下几种:锁屏,按HOME键,下接状态栏,双击HOME键弹出低栏,等情况。
5. – (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
// Will be deprecated at some point, please replace with application:openURL:sourceApplication:annotation:
这个方法已不再支持,可能会在以后某个版本中去掉。建议用下面第6个方法代替
6. – (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation NS_AVAILABLE_IOS(4_2);
// no equiv. notification. return NO if the application can’t open for some reason
当用户通过其它应用启动本应用时,会回调这个方法,url参数是其它应用调用openURL:方法时传过来的。
7. – (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
// try to clean up as much memory as possible. next step is to terminate app
当应用可用内存不足时,会调用此方法,在这个方法中,应该尽量去清理可能释放的内存。如果实在不行,可能会被强行退出应用。
8. – (void)applicationWillTerminate:(UIApplication *)application;
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
当应用退出,并且进程即将结束时会调到这个方法,一般很少主动调到,更多是内存不足时是被迫调到的,我们应该在这个方法里做一些数据存储操作。
9. // one of these will be called after calling -registerForRemoteNotifications
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken NS_AVAILABLE_IOS(3_0);
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error NS_AVAILABLE_IOS(3_0);
当客户端注册远程通知时,会回调上面两个方法。
如果成功,则回调第一个,客户端把deviceToken取出来发给服务端,push消息的时候要用。
如果失败了,则回调第二个,可以从error参数中看一下失败原因。
注:注册远程通知使用如下方法:
UIRemoteNotificationType t=UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound;[[UIApplication sharedApplication] registerForRemoteNotificationTypes:t];
10. – (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo NS_AVAILABLE_IOS(3_0);
当应用在前台运行中,收到远程通知时,会回调这个方法。
当应用在后台状态时,点击push消息启动应用,也会回调这个方法。
11. – (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification NS_AVAILABLE_IOS(4_0);
当应用收到本地通知时会调这个方法,同上面一个方法类似。
如果在前台运行状态直接调用,如果在后台状态,点击通知启动时,也会回调这个方法
本地通知可见另一篇文章:http://bluevt.org/?p=70
12. – (void)applicationDidEnterBackground:(UIApplication *)application NS_AVAILABLE_IOS(4_0);
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
当用户从台前状态转入后台时,调用此方法。使用此方法来释放资源共享,保存用户数据,无效计时器,并储存足够的应用程序状态信息的情况下被终止后,将应用 程序恢复到目前的状态。如果您的应用程序支持后台运行,这种方法被调用,否则调用applicationWillTerminate:用户退出。
13. – (void)applicationWillEnterForeground:(UIApplication *)application NS_AVAILABLE_IOS(4_0);
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
当应用在后台状态,将要进行动前台运行状态时,会调用此方法。
如果应用不在后台状态,而是直接启动,则不会回调此方法。
iPhone中的应用程序很容易受到打扰,比如一个来电可能导致应用程序失去焦点,如果这个时候接听了电话,那么应用程序会转到后台运行。还有很多其它类似的事件会导致iPhone应用程序失去焦点,在应用程序失去焦点前会调用委托类的applicationWillResignAct
另外一个非常重要的方法就是applicationDidReceiveMem
UIApplication的周期关键性步骤:
step 1,点击 app icon 或者从应用程序url(比如在Safari地址栏中输入应用程序url)启动应用程序。
step 2,就会进入 UIApplicationDelegate 的
- (void)applicationDidFinishLaunching:(UIApplication *)application;
或
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
step 3, 如果是从 url 启动的则先进入 UIApplicationDelegate 的
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
然后再跳转到step 4;否则直接跳转到step 4;
step 4,进入 UIApplicationDelegate 的
- (void)applicationDidBecomeActive:(UIApplication *)application;
step 5,进入应用程序主循环,这时应用程序已经是活动的了,用户可以与应用程序交互。
step 6,在 step 5 状态下,如果按住 home 键或者进行任务切换操作,然后跳转到 step 8;
step 7,在 step 5 状态下,应用程序被中断(如来电,来短信),进入 UIApplicationDelegate 的
- (void)applicationWillResignActive:(UIApplication *)application;
如果用户选择不处理继续留在当前应用程序,则回到 step 4;如果用户选择处理,则跳转到 step 8;
step 8,进入 UIApplicationDelegate 的
- (void)applicationWillTerminate:(UIApplication *)application;
当前应用程序关闭。
下面是这个类的一些功能:
1.设置icon上的数字图标
2.设置摇动手势的时候,是否支持redo,undo操作
3.判断程序运行状态
4.阻止屏幕变暗进入休眠状态
慎重使用本功能,因为非常耗电。
5.显示联网状态
6.在map上显示一个地址
7.发送电子邮件
8.打电话到一个号码
9.发送短信
[[UIApplicationsharedAppli
10.打开一个网址
参考 http://yanwt.iteye.com/blog/1933932
参考 http://blog.csdn.net/likendsl/article/details/7352935
- UIApplication代理方法
- 204,UIApplication与代理方法
- iOS UIApplication的代理方法总结
- iOS UIApplication的代理方法精华总结
- iOS UIApplication的代理方法总结
- UIApplication常用的代理方法和属性
- UIApplication的代理
- UIApplication代理简介
- ios uiapplication 代理appdelegate
- UIApplication对象及其代理UIApplicationDelegate
- UIApplication对象及其代理UIApplicationDelegate
- UIApplication对象及其代理UIApplicationDelegate
- UIApplication对象及其代理UIApplicationDelegate
- UIApplication对象及其代理UIApplicationDelegate
- UIApplication对象及其代理UIApplicationDelegate
- UIApplication对象及其代理UIApplicationDelegate
- UIApplication对象及其代理UIApplicationDelegate
- UIApplication对象及其代理UIApplicationDelegate
- Eclipse/Myeclipse控制台中文乱码问题
- arduino esp8266 接线和代码、
- 抽象思维实现各种不同的接口调用
- FFmpegFrameRecorder保存视频or rtmp发布
- 浅谈HTTP中GET和POST的区别
- UIApplication代理方法
- Brodatz纹理图像库
- DBUtils 封装
- HTML格式转JSON格式要注意的问题
- Windows 下openssl安装与配置
- 【以太网数据包】OICQ数据包(QQ)
- JAVA -备忘录设计模式
- 时间格式化hh:mm:ss和HH:mm:ss区别
- android开发中遇到的异常总结