创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件。  
 
AppDelegate为何物?  
AppDelegate为整个应用的一个代理,提供程序启动、退出等类似监控的接口。  
 
 
 
 
AppDelegate.m  
 
接口所在的文件,常见接口有:  
 
application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions//应用程序启动后,要执行的委托调用  
 
applicationWillResignActive:(UIApplication *)application//应用程序将要由活动状态切换到非活动状态时执行的委托调用,如按下home 按钮,返回主屏幕,或全屏之间切换应用程序等。  
 
applicationDidEnterBackground:(UIApplication *)application//在应用程序已进入后台程序时,要执行的委托调用。所以要设置后台继续运行,则在这个函数里面设置即可。  
 
applicationWillEnterForeground:(UIApplication *)application//在应用程序将要进入前台时(被激活),要执行的委托调用,与applicationWillResignActive 方法相对应。  
 
applicationDidBecomeActive:(UIApplication *)application//在应用程序已被激活后,要执行的委托调用,刚好与  applicationDidEnterBackground 方法相对应。  
 
applicationWillTerminate:(UIApplication *)application//在应用程序要完全退出的时候,要执行的委托调用。  
 
 
 
全局变量  
 
AppDelegate可以在整个应用程序中调用,在其他页面中可以使用代码段获取AppDelegate的全局变量:AppDelegate *appDelegate=[[UIApplication sharedApplication] delegate];  
 
因此可以在AppDelegate.h中定义需要全局使用的变量。  
 
 
 
系统启动代理(第一个页面的加载)  
 
application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
 
一般在该代理接口中需要进行应用系统window(程序显示窗口)配置,完成页面弹出效果。(AppDelegate默认拥有UIWindow *window实例变量)  
可以使用以下代码段完成:  
 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];//显示窗口配置  
    LoginViewController *login = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];//初始化应用系统需要显示的第一个页面(一般为ViewController)  
    self.window.rootViewController = login;//配置window窗口的rootViewController实例  
    //判定系统版本,选择页面加载方式  
    if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)  
    {  
        [self.window addSubview:login.view];  
    }  
    else  
    {  
        [self.window setRootViewController:login];  
    }  
    [self.window makeKeyAndVisible];  
    return YES;  
 
 
结语:AppDelegate的使用还有很多,随着应用程序的开发,我会继续补充完善。  
 
补充:应用创建之后可以在Supporting Files分组中看到main.m类文件,是整个应用最开始的入口。 
执行的代码段为:return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 最后一个参数即为应用中的AppDelegate类的实例,执行这段程序即进入AppDelegate类中的application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  方法接口。


UIApplication、AppDelegate、委托

UIApplication、AppDelegate、委托等的关系?  
什么是委托?为什么要有委托?委托在Iphone中的实现机制是怎样的?

一般来说,我们创建了一个Iphone项目,默认会有这个main.m类,我们都晓得,一个main()方法代表着一个应用程序的入口,  
以下是对应的main.m的方法体:

  1. int main(int argc, charchar *argv[])
  2. {
  3. @autoreleasepool {
  4. return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  5. }
  6. }

在上述的这个方法体中,UIApplicationMain()方法根据我们提供的AppDelegate类名称来创建UIApplication的一个实例,且将这个  
AppDelegate作为UIApplication的委托,一般我们可以通过类方法[UIApplication shareApplication]来获取对UIApplication 
的一个引用;

在UIApplication接收到系统事件和生命周期事件时,会把相应的事件传递给UIApplicationDelegate进行处理,下表所列的生命周期函数大都是可选的,  
但为了应用程序的健壮性程序员应该实现它们。  
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)newStatusBarOrientation  
duration:(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  
    [UIApplication sharedApplication].applicationIconBadgeNumber = 4;  
2.设置摇动手势的时候,是否支持redo,undo操作  
    //摇动手势,是否支持redo undo操作。  
   //3.0以后引进,缺省YES  
    [UIApplication sharedApplication].applicationSupportsShakeToEdit =YES;

3.判断程序运行状态  
    //判断程序运行状态,在2.0以后引入

  1. /*
  2. UIApplicationStateActive,
  3. UIApplicationStateInactive,
  4. UIApplicationStateBackground
  5. */
  6. if([UIApplication sharedApplication].applicationState ==UIApplicationStateInactive){
  7. NSLog(@"程序在运行状态");
  8. }

4.阻止屏幕变暗进入休眠状态  
    //阻止屏幕变暗,慎重使用,缺省为no 2.0  
    [UIApplicationsharedApplication].idleTimerDisabled =YES;  
慎重使用本功能,因为非常耗电。  
5.显示联网状态  
    //显示联网标记 2.0  
    [UIApplication sharedApplication].networkActivityIndicatorVisible =YES;

6.在map上显示一个地址

  1. NSString* addressText =@"1 Infinite Loop, Cupertino, CA 95014";
  2. // URL encode the spaces
  3. addressText =  [addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
  4. NSString* urlText = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
  5. [[UIApplication sharedApplication]openURL:[NSURLURLWithString:urlText]];

7.发送电子邮件

  1. NSString *recipients =@"mailto:first@example.com?cc=second@example.com,third@example.com&subject=Hello from California!";
  2. NSString *body =@"&body=It is raining in sunny California!";
  3. NSString *email = [NSStringstringWithFormat:@"%@%@", recipients, body];
  4. email = [emailstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  5. [[UIApplication sharedApplication]openURL:[NSURLURLWithString:email]];

8.打电话到一个号码

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

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

UIApplication:一般是指运行中的应用程序,它的一个主要工作是处理用户事件,它会引起一个队列,所有的用户事件都放入到队列中,  
逐个被处理掉,在处理的时候,它会发送事件到一个合适的处理事件的目标控件,此外,UIApplication还维护在本应用程序中打开的  
Window列表(UIWindow实例),这样子它就可以接触应用程序中的任何一个UIView对象;  
AppDelegate:负责为另外一个对象处理特定事件的类,比如我们load完一个页面的时候,委托就帮助UIApplication完成  
didFinishLaunchingWithOptions动作,相应地在这个方法里面执行对应地action;  
委托是给一个对象提供机会对另一个对象中的变化作出反映或者影响另一个对象的行为,通常包括3种动词:should、will、did

UIApplication委托AppDelegate,则AppDelegate必须得实现UIApplicationDelegate协议,这个协议我们可以当成是java中的一个接口,  
协议中定义了一系列方法,我们必须在子类中将其实现,然后底层UIApplication会自动去调用我们已经定义好的方法,这有点类似java中Ioc方向控制机制  
当然,iphone中运用委托设计模式的地方很多,比如这个UIActionSheetDelegate、UIAlertViewDelegate协议,比如我们要在自己的某个界面中展示  
这个操作表(UIActionSheet),则我们的视图控制器必须要实现这个UIActionSheetDelegate协议,重写其中的某些方法,也就是说,谁被委托了,  
谁就要实现协议中定义的方法,确保正常的调用

ios开发之AppDelegate的更多相关文章

  1. 【转】ios开发之AppDelegate

    创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件.   AppDelegate为何物?  AppDelegate为整个应用的一个代理,提供程序启动.退出等类似 ...

  2. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  3. iOS开发之UISearchBar初探

    iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...

  4. iOS开发之UIImage等比缩放

    iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...

  5. iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用

    iOS开发之  Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...

  6. iOS开发之loadView、viewDidLoad及viewDidUnload的关系

    iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系    标题中所说的3个方 ...

  7. iOS开发之info.pist文件和.pch文件

    iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...

  8. iOS开发之WKWebView简单使用

    iOS开发之WKWebView简单使用   iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...

  9. iOS 开发之Block

    iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1.     按钮事件 target action 机制. 它是将一 ...

随机推荐

  1. 黑客群体的露面说明互联网公司开始回馈IT行业了,

    揭开中国黑客群体的神秘面纱 年薪数百万 2015-04-26 09:59:45 15259 次阅读 14 次推荐 稿源:经济观察报 33 条评论   在网络世界有专属的代号,那里才是他们最习惯的“世界 ...

  2. 2015 年开源前端框架盘点 TOP 20

    1.名称:Bootstrap 类别/语言:HTML.CSS.JavaScript 创建者: Twitter 人气:在Github上有91007 stars 描述:主流框架中毋庸置疑的老大,Bootst ...

  3. Tutorial: Analyzing sales data from Excel and an OData feed

    With Power BI Desktop, you can connect to all sorts of different data sources, then combine and shap ...

  4. 历时八年,HTML5 标准终于完工了

    万维网联盟(W3C)2014年10月29日泪流满面地宣布,经过几乎8年的艰辛努力,HTML5标准规范终于最终制定完成了,并已公开发布. 在此之前的几年时间里,已经有很多开发者陆续使用了HTML5的部分 ...

  5. iOS学习之视图控制器

    一.自定义视图(label-textField组合视图)      1.自定义视图:系统标准UI之外,自己组合出的新的视图.      2.优点:iOS提供了很多UI组件,借助它们我们可以实现不同的功 ...

  6. Objective-C面向对象(四)

    1.协议(protocol)和委托 1.1 规范.协议与接口 OC中协议的作用就相当于其他语言中接口的作用.协议定义的是多个类共同的公共行为规范,协议通常定义一组公用方法,但不提供实现. 1.2 定义 ...

  7. 推荐一款系统软件:Unity tweak tool

    功能很多慢慢体会 在软件中心搜索unity tweak tool安装

  8. [转载]poi导出excel,可以自定义保存路径

    poi导出excel比js导出excel安全性更好,在使用poi导出excel时,先要导入poi-3.5-FINAL-20090928.jar包到你项目的lib目录下,我这里选择是3.5版的 1.ac ...

  9. OpenFramework中视频或者图片进行中心旋转、平移、放大、缩小、矫正(本例以视频为准,只给出主要代码)

    /********** update mesh部分***********/ for(int i=0;i<4;i++) {  mesh[i].clear(); //重要,不加的话,移动视频的四个角 ...

  10. SD 销售订单的BADI增强SD_BADI_PRICE_CHECK

    METHOD if_ex_badi_sd_sales~save_document.* CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'* EXPORTING* titel = ...