转载地址:http://www.apkbus.com/android-131646-1-1.html

我们开发出来的运行在iOS平台上的应用程序都有一个UIApplication类的对象。
1、是iOS应用程序的起始点,并负责初始化和显示UIWindow;
2、负责加载应用程序的第一个UIView到UIWindow中;
3、帮助管理应用程序的生命周期;
4、接收事件,再转给它的委托"UIApplicationDelegate"来处理;此委托可处理的事件包括:应用程序的生命周期事件如程序启动和关闭、系统事件如来电和记事项警告;
虽然UIApplication负责接收事件,但它无需我们来修改。而它的负责处理事件的委托类,其遵循UIApplicationDelegate协议,是需要我们进行开发。

例如
应用BirdsApp的委托类的声明如下:
@interface BirdsAppDelegate : UIResponder <UIApplicationDelegate>

这个类需要实现UIApplicationDelegate协议中的方法,用于处理UIApplication接收的事件。
这些方法有很多,大概是这些:
1、应用完成登录的事件处理方法;
2、应用中断的事件处理方法;
3、内存很低的事件处理方法;
4、重要改变发生的事件处理方法;

在开发时,我们需实现的最重要的方法是application:didFinishLaunchingWithOptions:,其他方法也应该去实现,虽然它们都是可选的。

在XCode4.5版中,如果使用它的模板创建项目,Xcode将会为我们创建遵守UIApplicationDelegate协议的方法,这些方法的实现代码需要我们自己去开发。

例如,创建一个名称为BirdsApp的项目,XCode会自动创建BirdsAppDelegate.h和BirdsAppDelegate.m文件。

  1. /*BirdsAppDelegate 应用委托类*/
  2. #import <UIKit/UIKit.h>
  3. [url=home.php?mod=space&uid=661]@class[/url] BirdSightingDataController;
  4. @class BirdsMasterViewController;
  5. @interface BirdsAppDelegate : UIResponder <UIApplicationDelegate>
  6. @property (strong, nonatomic) UIWindow *window;
  7. @property (strong, nonatomic) BirdSightingDataController *dataController;
  8. @property (strong, nonatomic) BirdsMasterViewController *firstViewController;
  9. @end
  10. #import "BirdsAppDelegate.h"
  11. #import "BirdSightingDataController.h"
  12. #import "BirdsMasterViewController.h"
  13. @implementation BirdsAppDelegate
  14. @synthesize window = _window, dataController = _dataController, firstViewController= _firstViewController;
  15. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  16. {
  17. UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
  18. BirdsMasterViewController *firstViewController = (BirdsMasterViewController *)[[navigationController viewControllers] objectAtIndex:0];
  19. BirdSightingDataController *aDataController = [[BirdSightingDataController alloc] init];
  20. firstViewController.dataController = aDataController;
  21. self.dataController = aDataController;
  22. return YES;
  23. }
  24. @end

复制代码

建立在storyboard基础上的应用程序,作为UIApplication类的对象,在启动过程中将进行下列操作。
首先,加载info.plist文件内容到一个NSDictionary对象中,读取字典对象的键UIMainStoryboardFile对应的值得到storyboard配置文件名称,通常文件名称会是MainStoryboard.storyboard。
其次,加载MainStoryboard.storyboard文件,根据文件中记录的第一个视图控制器的值,自动实例化该控制器。该控制器称为主视图控制器。
再次,将主视图控制器的所有的视图使用addSubView方法加载到UIWindow对象中去。
这个时间点,算是完成应用启动,调用应用委托类中的application:didFinishLaunchingWithOptions:的方法。
而以前的应用程序用Interface Builder开发,使用nib管理视图,那么必须在应用委托类中实现加载主视图控制器的所有视图和实例化UIWindow对象的操作。

  1. #import <UIKit/UIKit.h>
  2. @interface GuessChildAppDelegate : NSObject <UIApplicationDelegate> {
  3. UIWindow *window;
  4. UINavigationController* simple_;
  5. }
  6. @property (nonatomic, retain) UIWindow *window;
  7. @end
  8. #import "GuessChildAppDelegate.h"
  9. #import "WifeBirthdayController.h"
  10. @implementation GuessChildAppDelegate
  11. @synthesize window;
  12. #pragma mark -
  13. #pragma mark Application lifecycle
  14. -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  15. //CGRect frame = [[UIScreen mainScreen] bounds];
  16. window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  17. WifeBirthdayController* rootViewController = [[[WifeBirthdayController alloc] init] autorelease];
  18. simple_ = [[UINavigationController alloc] initWithRootViewController:rootViewController];
  19. [window addSubview:simple_.view];
  20. // Override point for customization after application launch.
  21. [window makeKeyAndVisible];
  22. return YES;
  23. }
  24. -(void)dealloc {
  25. [window release];
  26. [super dealloc];
  27. }
  28. @end

复制代码

本想记录下应用委托类的用法,结果复习了一下应用程序的启动过程。

[转]UIApplicationDelegate分析小结的更多相关文章

  1. [干货]2017已来,最全面试总结——这些Android面试题你一定需要

        地址.http://blog.csdn.net/xhmj12/article/details/54730883 相关阅读: 吊炸天!74款APP完整源码! [干货精品,值得收藏]超全的一线互联 ...

  2. Git之(一)Git是什么[转]

    为什么使用Git 孔子曾经曰过的,名正则言顺 言顺则事成. 我们在学习一项新技术之前,弄清楚为什么要学它至关重要,至于为什么要学习Git,我用一段if-else语句告诉你原因: if(你相信我){ 我 ...

  3. [caffe]linux下安装caffe(无cuda)以及python接口

    昨天在mac上折腾了一天都没有安装成功,晚上在mac上装了一个ParallelDesktop虚拟机,然后装了linux,十分钟就安装好了,我也是醉了=.= 主要过程稍微记录一下: 1.安装BLAS s ...

  4. [Swift]基础

    [Swift]基础 一, 常用变量 var str = "Hello, playground" //变量 let str1="Hello xmj112288" ...

  5. [Ruby on Rails系列]4、专题:Rails应用的国际化[i18n]

    1. 什么是internationalization(i18n)? 国际化,英文简称i18n,按照维基百科的定义:国际化是指在设计软件,将软件与特定语言及地区脱钩的过程.当软件被移植到不同的语言及地区 ...

  6. [译]一个灵活的 Trello 敏捷工作流

    [译]一个灵活的 Trello 敏捷工作流 翻译自 An Agile Trello Workflow That Keeps Tasks Flexible Getting things done 可不只 ...

  7. iOS10收集IDFA,植入第三方广告[终结]--ADMob

    [PS: 前段时间,公司做ASO推广,需要在应用中收集IDFA值,跟广告平台做交互!于是有了这个需求--] 1.首先,考虑了一下情况(自己懒 -_-#),就直接在首页上写了一个Banner,循环加载广 ...

  8. [2017BUAA软工助教]案例分析小结

    BUAA案例分析小结 一.作业要求 http://www.cnblogs.com/jiel/p/7631784.html 二.统计数据 总人数 神策数据 博客园博客 必应词典 30 1 12 17 三 ...

  9. Java基础 之软引用、弱引用、虚引用 ·[转载]

    Java基础 之软引用.弱引用.虚引用 ·[转载] 2011-11-24 14:43:41 Java基础 之软引用.弱引用.虚引用 浏览(509)|评论(1)   交流分类:Java|笔记分类: Ja ...

随机推荐

  1. Hadoop学习(1)-- 入门介绍

    Hadoop是Apache基金会开发的一个分布式系统基础架构,是时下最流行的分布式系统架构之一.用户可以在不了解分布式底层的情况下,在Hadoop上快速进行分布式应用的开发,并利用集群的计算和存储能力 ...

  2. RAC GI安装,报"Task resolv.conf Integerity"验证失败

    安装12.1.0.2 rac测试环境的时候,报"Task resolv.conf Integerity"验证失败 解决方案: 因为测试环境,没有使用DNS,删除resolv.con ...

  3. 通过SSIS监控远程服务器磁盘空间并发送邮件报警!

    由于之前ESB是供应商部署的,且部署在C盘(C盘空间很小,还添加了很多ESB的windows服务日志在C盘,很容易把C盘空间占满,导致ESB服务运行宕机,几乎每隔几周发生一次事故,需要人工干预处理,不 ...

  4. spring mvc 的Controller类默认Scope是单例(singleton)的

    使用Spring MVC有一段时间了,之前一直使用Struts2,在struts2中action都是原型(prototype)的, 说是因为线程安全问题,对于Spring MVC中bean默认都是(s ...

  5. Custom IFormatProvider

    The following example shows how to write a custom IFormatProvider which you can use in methodString. ...

  6. (转)VS2008连接TFS 2010

    偶尔还是会用到,老是忘记安装的顺序,在这儿mark一下. 用VS2008连接TFS 2010, 需要按照以下顺序安装一下组件: .VS2008 Team Explorer 2008 3.Install ...

  7. C# 多线程 lock 实例

    class Program { static void Main(string[] args) { //在t1线程中调用LockMe,并将deadlock设为true(将出现死锁) int i = 1 ...

  8. [php]使用会话session

    <?php /* cookie - 在客户端上存储少了信息(cookie) session(会话) - 解决cookie大小限制/数量/其他 setcookie() - 设置cookie 在客户 ...

  9. javascript和jquery中获取列表的索引

    网页中的图片预览一般都需要获取图片列表的索引,或则图片对应的标签的索引,以此达到点击相应的标签获取索引,显示相应的图片 列表有很多种表达的方式,一种是 <ul> <li>苹果& ...

  10. ubuntu android环境配置

    1.下载eclipse 2.下载sdk 3.安装adt 4.配置sdk环境路径sudo gedit /etc/profile export PATH=$JAVA_HOME/bin:$JAVA_HOME ...