`
bengan
  • 浏览: 203760 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

iOS5编程--UIApplication深入研究

 
阅读更多
iOS5编程--UIApplication深入研究  

很多时候,我们不需要关心这个类,我们很少继承这个类,偶尔会调用这个类的api来实现一些功能,但是不可否认,这个类是iOS编程中很重要的一个概念,所以我这里写这个文章来总结以下这个类的信息,如果写的不对的地方,请留言,多谢。UIApplication的核心作用是提供了iOS程序运行期间的控制和协作工作。每一个程序在运行期必须有且仅有一个UIApplication(或则其子类)的一个实例。回想一下我在前面的文章“main函数研究”的文章中提到的main函数的代码,可以看出,在程序开始运行的时候,UIApplicationMain函数是程序进入点,这个函数做了很多工作,其中一个重要的工作就是创建一个UIApplication的单例实例。在你的代码中你,你可以通过调用[UIApplication sharedApplication]来得到这个单例实例的指针。UIApplication的一个主要工作是处理用户事件,它会起一个队列,把所有用户事件都放入队列,逐个处理,在处理的时候,它会发送当前事件到一个合适的处理事件的目标控件。此外,UIApplication实例还维护一个在本应用中打开的window列表(UIWindow实例),这样它就可以接触应用中的任何一个UIView对象。UIApplication实例会被赋予一个代理对象,以处理应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警告)等等。新建一个任意类型的iOS应用工程,加入我们在Class Prefix输入是TC,我们可以看到工程中生成一个类:TCAppDelegate :UIResponder <UIApplicationDelegate>这里这个类的基类是UIResponder,和4.2以前生成的工程是不同的,以前是继承自NSObject。不论如何,本类实现了一个名叫UIApplicationDelegate的接口,这个表明这个类就是这个工程中UIApplication实例的代理类。在main函数中,@autoreleasepool { returnUIApplicationMain(argc, argv, nil,NSStringFromClass([TCAppDelegateclass]));    }
这里传入了代理类到
UIApplicationMain
函数中,
UIApplicationMain
函数在生成唯一个
UIApplication
的时候就可以把代理类的实例指针告诉这个单例对象了。
可以通过如下代码获UIApplication代理对象:
TCAppDelegate *myDelegate = (TCAppDelegate *)[UIApplicationsharedApplication].delegate; 在UIApplication接收到系统事件和生命周期事件时,会把相应的事件传递给UIApplicationDelegate进行处理,下表所列的生命周期函数大都是可选的,但为了应用程序的健壮性程序员应该实现它们。
UIApplicationDelegate Event-Handling Methods Method Signature
1:application:didChangeStatusBarFrame: - (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
2:application:didChangeStatusBarOrientation: - (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
3:application:handleOpenURL: - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
4:application:willChangeStatusBarOrientation:duration: - (void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration
5:application:willChangeStatusBarFrame - (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
6:applicationDidBecomeActive: - (void)applicationDidBecomeActive:(UIApplication*)application
7:applicationDidFinishLaunching: - (void)applicationDidFinishLaunching:(UIApplication*)application
8:applicationDidReceiveMemoryWarning: - (void)applicationDidReceiveMemoryWarning:(UIApplication*)application
9:applicationSignificantTimeChange: - (void)applicationSignificantTimeChange:(UIApplication*)application
10:applicationWillResignActive: - (void)applicationWillResignActive:(UIApplication*)application
11:applicationWillTerminate: - (void)applicationWillTerminate:(UIApplication*)application


1、- (void)applicationWillResignActive:(UIApplication *)application说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了2、- (void)applicationDidBecomeActive:(UIApplication *)application说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反3、- (void)applicationDidEnterBackground:(UIApplication *)application说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可4、- (void)applicationWillEnterForeground:(UIApplication *)application说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。5、- (void)applicationWillTerminate:(UIApplication *)application说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。6、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止7、- (void)applicationSignificantTimeChange:(UIApplication*)application说明:当系统时间发生改变时执行8、- (void)applicationDidFinishLaunching:(UIApplication*)application说明:当程序载入后执行9、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame说明:当StatusBar框将要变化时执行10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientationduration:(NSTimeInterval)duration说明:当StatusBar框方向将要变化时执行11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url说明:当通过url执行12、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation说明:当StatusBar框方向变化完成后执行13、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame说明:当StatusBar框变化完成后执行
iPhone中的应用程序很容易受到打扰,比如一个来电可能导致应用程序失去焦点,如果这个时候接听了电话,那么应用程序会转到后台运行。还有很多其它类似的事件会导致iPhone应用程序失去焦点,在应用程序失去焦点前会调用委托类的applicationWillResignActive()方法,而应用程序再次获取到焦点的时候会调用applicationDidBecomeActive()方法。比如在运行应用程序的时候锁屏会调用委托类的applicationWillResignActive()方法,而当屏幕被解锁的时候,又会调用applicationDidBecomeActive()方法。 另外一个非常重要的方法就是applicationDidReceiveMemoryWarning(),因为iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,但在终止之前操作系统会通过先调用委托类的applicationDidReceiveMemoryWarning()方法警告应用程序,在UIApplication接收到这个事件后它会传递给委托类的applicationDidReceiveMemoryWarning()方法,委托类在这个方法内可以进行释放内存的操作以防止操作系统强制终止应用程序的运行。下面是这个类的一些功能:
1.设置icon上的数字图标

    //设置主界面icon上的数字图标,在2.0中引进, 缺省为0    [UIApplicationsharedApplication].applicationIconBadgeNumber = 4;2.设置摇动手势的时候,是否支持redo,undo操作
    //摇动手势,是否支持redo undo操作。 //3.0以后引进,缺省YES    [UIApplicationsharedApplication].applicationSupportsShakeToEdit =YES;
3.判断程序运行状态
    //判断程序运行状态,在2.0以后引入    /*     UIApplicationStateActive,     UIApplicationStateInactive,     UIApplicationStateBackground     */ if([UIApplicationsharedApplication].applicationState ==UIApplicationStateInactive){        NSLog(@"程序在运行状态");    }
4.阻止屏幕变暗进入休眠状态
    //阻止屏幕变暗,慎重使用,缺省为no 2.0    [UIApplicationsharedApplication].idleTimerDisabled =YES;慎重使用本功能,因为非常耗电。5.显示联网状态
    //显示联网标记 2.0    [UIApplicationsharedApplication].networkActivityIndicatorVisible =YES;
6.在map上显示一个地址
NSString* addressText =@"1 Infinite Loop, Cupertino, CA 95014"; // URL encode the spaces    addressText =  [addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; NSString* urlText = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];     [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlText]];
7.发送电子邮件
NSString *recipients =@"mailto:first@example.com?cc=second@example.com,third@example.com&subject=Hello from California!"; NSString *body =@"&body=It is raining in sunny California!";     NSString *email = [NSStringstringWithFormat:@"%@%@", recipients, body];    email = [emailstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];     [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:email]];
8.打电话到一个号码

// Call Google 411    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"tel://8004664411"]];
9.发送短信
// Text to Google SMS
    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"sms://466453"]];
10.打开一个网址


// Lanuch any iPhone developers fav site
    [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]];

(注:本文系转载,原文地址为:http://blog.csdn.net/nicktang/article/details/6800402)
分享到:
评论

相关推荐

    ios-URLNavi.zip

    在iOS开发中,URL Scheme是一种常见的机制,允许应用程序之间互相通信和调用。"ios-URLNavi.zip" 是一个项目...通过深入研究和理解该项目,开发者不仅可以提升自己的编程技能,还能更好地理解iOS平台的应用间通信机制。

    IOS应用源码Demo-kuaidial-电话拨号助手(强烈推荐)-毕设学习.zip

    通过学习这款源码,我们可以深入了解iOS应用的架构、功能实现以及与系统API的交互。 1. **项目结构** "kuaidial"源码的组织结构清晰,通常包括`ViewController`、`Model`、`View`和`Service`等主要部分。`...

    IOS应用源码Demo-自定义action sheet效果库-毕设学习.zip

    通过深入研究这个示例,你将能更好地理解和掌握iOS应用开发中的自定义组件技巧,这对于毕业设计和论文撰写将非常有帮助。 总之,自定义Action Sheet是iOS应用开发中的一个重要技能,它能让你的应用更加个性化和专业...

    ios-时钟.zip

    在iOS开发中,创建一个时钟应用或者时钟特效是一个常见的任务,这涉及到动画、时间管理和用户界面设计等多个方面。...通过研究这个项目,开发者可以深入理解这些概念,并应用到自己的iOS应用开发中。

    IOS应用源码之altenmueller-snake-player-7172fec.zip

    通过对Altenmueller Snake Player源码的深入研究,开发者不仅可以提升iOS应用开发技能,还能掌握游戏编程的技巧,了解多媒体处理的方法,以及如何在实际项目中应用设计模式和优化技术。这是一个绝佳的学习资源,对于...

    ios-截图工具.zip

    本文将深入探讨如何在iOS平台上实现截图工具,主要基于Swift编程语言,同时也会提及到GitHub上的开源项目`fish-yan/GetImage`。 首先,我们要理解iOS中的屏幕截图原理。在iOS中,可以使用`UIKit`框架提供的`...

    IOS应用源码Demo-跳转到app store的小案例-毕设学习.zip

    【标签】"IOS 毕业设计 论文 源码 App"表明这个案例可以作为毕业设计的一部分,也可以作为研究论文中的实际示例,帮助学生或研究人员理解iOS应用开发的实际操作,尤其是在涉及到应用间交互这部分内容时。 至于...

    iOS游戏应用源代码——htroche-CrowdTrivia-170fdd5.zip

    通过对这个源代码的深入研究,开发者不仅可以学习到iOS应用开发的基本技术,还能了解到如何设计和实现一个完整的游戏应用。同时,这也是一个很好的实践案例,可以帮助理解软件工程的最佳实践,如代码组织、模块化和...

    Beginning iOS.5 Development Exploring the iOS SDK 源代码

    Beginning iOS 5 ...通过深入研究这些源代码,不仅能够加深对iOS开发的理解,还能提升实际项目中的开发能力。对于iOS新手来说,这是一个非常宝贵的资源,能帮助他们从零开始,逐步构建出功能完善的iOS应用程序。

    ios7版 30天精通iPhone手机编程

    【iOS7开发基础知识点】 iOS7的开发基础是学习iPhone编程的起点,涵盖了各种模板、基本框架和控件...虽然原作者缺失了几日的内容,但以上列出的每一个知识点都值得深入研究和实践,为后续的iOS开发之路奠定坚实基础。

    IOS应用源码——testcut.rar

    "IOS应用源码——testcut.rar" 提供了一个名为 "testcut" 的iOS应用的完整源代码,这对于我们深入学习iOS编程、Swift语言以及Apple的UIKit框架来说,是一个宝贵的资源。 源码分析通常包括以下几个关键部分: 1. **...

    iOSAPP状态修复基础使用_Objective-C_下载.zip

    在iOS应用开发中,状态修复(State Restoration)是一项重要的功能,它允许用户在退出或系统关闭后恢复应用程序到之前的状态。...YNStateRestorationDemo-master项目是学习这一技术的宝贵资源,值得深入研究。

    IOS应用源码——oalTouch.zip

    Objective-C是iOS开发的主要语言,理解其面向对象特性、消息传递机制、类别(Category)、协议(Protocol)以及 Blocks 是深入研究源码的基础。开发者应熟悉如下的概念:实例变量、属性(Property)、初始化方法...

    IOS应用源码——顶部状态bar效果.zip

    标题中的“IOS应用源码——顶部状态bar效果.zip”表明这是一个关于iOS应用开发的资源包,专注于实现顶部状态栏...通过研究源码和遵循说明,他们可以深入理解iOS UI设计原则,并学会如何通过编程实现自定义视觉效果。

    IOS应用源码——OpenSpringBoard for iOS.rar

    总的来说,OpenSpringBoard for iOS项目为开发者提供了一个深入学习iOS操作系统核心组件的机会,通过对源码的研究,不仅可以提升iOS开发技能,还能对整个系统的运作有更深入的理解。这不仅有利于个性化系统的开发,...

    IOS应用源码——TheElements.rar

    《TheElements》是一款针对iOS平台的应用程序,其源码提供了深入理解iOS开发的宝贵资源。这个压缩包包含的文件是整个应用程序的构建基础,通过分析这些文件,我们可以学习到许多关于iOS开发的知识点。 首先,iOS...

    选择城市iOS.zip_MacOS编程_Objective-C_

    下面我们将深入探讨Objective-C和在iOS上构建此类应用的相关知识点。 1. **Objective-C语言基础**: Objective-C是在C语言基础上扩展的面向对象编程语言,主要增加了消息传递机制和类别(Category)、协议...

    IOS应用源码之单例模式 .rar

    在iOS应用开发中,单例模式是一种常用的软件设计模式,它保证了类只有一个实例,并提供一个全局访问点。这个模式在iOS中尤其常见,因为许多...这将有助于提高你的iOS编程技能,尤其是对于系统架构和设计模式的理解。

    IOS应用源码——一些iPhone开源项目代码SplashDemo.rar

    在iOS开发领域,开源代码是开发者们学习和借鉴的重要资源,它们可以帮助我们了解最佳实践,提升编程技巧,并快速实现特定功能。"SplashDemo"是一个针对iOS应用的源码项目,专注于启动屏幕(Splash Screen)的实现。...

    iOS CoreData and Sqlite3 Demo

    在iOS开发中,CoreData和SQLite3是两种常见的数据存储技术。它们各有特点,适用于不同的应用场景。本Demo旨在展示如何在iOS应用中使用这...通过深入研究和实践这个Demo,开发者可以提升自己在iOS应用开发中的综合能力。

Global site tag (gtag.js) - Google Analytics