我们开发出来的运行在iOS平台上的应用程序都有一个UIApplication类的对象。
1、是iOS应用程序的起始点,并负责初始化和显示UIWindow;
2、负责加载应用程序的第一个UIView到UIWindow中;
3、帮助管理应用程序的生命周期;
4、接收事件,再转给它的委托"UIApplicationDelegate"来处理;此委托可处理的事件包括:应用程序的生命周期事件如程序启动和关闭、系统事件如来电和记事项警告;
(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1742950
)
虽然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文件。
/*BirdsAppDelegate 应用委托类*/
#import <UIKit/UIKit.h>
@class BirdSightingDataController;
@class BirdsMasterViewController;
@interface BirdsAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) BirdSightingDataController *dataController;
@property (strong, nonatomic) BirdsMasterViewController *firstViewController;
@end
#import "BirdsAppDelegate.h"
#import "BirdSightingDataController.h"
#import "BirdsMasterViewController.h"
@implementation BirdsAppDelegate
@synthesize window = _window, dataController = _dataController, firstViewController= _firstViewController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
BirdsMasterViewController *firstViewController = (BirdsMasterViewController *)[[navigationController viewControllers] objectAtIndex:0];
BirdSightingDataController *aDataController = [[BirdSightingDataController alloc] init];
firstViewController.dataController = aDataController;
self.dataController = aDataController;
return YES;
}
@end
建立在storyboard基础上的应用程序,作为UIApplication类的对象,在启动过程中将进行下列操作。
首先,加载info.plist文件内容到一个NSDictionary对象中,读取字典对象的键UIMainStoryboardFile对应的值得到storyboard配置文件名称,通常文件名称会是MainStoryboard.storyboard。
其次,加载MainStoryboard.storyboard文件,根据文件中记录的第一个视图控制器的值,自动实例化该控制器。该控制器称为主视图控制器。
再次,将主视图控制器的所有的视图使用addSubView方法加载到UIWindow对象中去。
这个时间点,算是完成应用启动,调用应用委托类中的application:didFinishLaunchingWithOptions:的方法。
而以前的应用程序用Interface Builder开发,使用nib管理视图,那么必须在应用委托类中实现加载主视图控制器的所有视图和实例化UIWindow对象的操作。
#import <UIKit/UIKit.h>
@interface GuessChildAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UINavigationController* simple_;
}
@property (nonatomic, retain) UIWindow *window;
@end
#import "GuessChildAppDelegate.h"
#import "WifeBirthdayController.h"
@implementation GuessChildAppDelegate
@synthesize window;
#pragma mark -
#pragma mark Application lifecycle
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//CGRect frame = [[UIScreen mainScreen] bounds];
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
WifeBirthdayController* rootViewController = [[[WifeBirthdayController alloc] init] autorelease];
simple_ = [[UINavigationController alloc] initWithRootViewController:rootViewController];
[window addSubview:simple_.view];
// Override point for customization after application launch.
[window makeKeyAndVisible];
return YES;
}
-(void)dealloc {
[window release];
[super dealloc];
}
@end
本想记录下应用委托类的用法,结果复习了一下应用程序的启动过程。
附一份社会热点评论短文。
《史记. 切糕传》: 贩切糕者, 多为西域人也。富可敌国。其业暴利,因有民曰:「一两五十,一刀三斤。」更有甚者曰:「一刀杨幂上床, 两刀帝都买房,三刀兰博到手,四刀盖茨认娘」。 故欧美人遇奢侈且无力购买之物时大多惊呼:「哦,卖糕的!」
分享到:
相关推荐
在iOS开发中,UIApplicationDelegate协议是应用开发中非常关键的一个部分。UIApplication对象是iOS应用中所有活动的管理者,而UIApplicationDelegate协议则是定义了一个应用可以响应的关键事件列表。这些事件包括...
UIApplicationDelegate提供了两种方法,可在用户打开应用程序时用来运行代码: applicationWillEnterForeground和applicationDidBecomeActive 。 但是以下两种方法都不适合这种情况: 首次启动应用程序时未调用...
在Objective-C中,AppDelegate类通常作为UIApplication的代理,继承自`UIResponder`并实现`UIApplicationDelegate`协议。这样,AppDelegate可以响应UIApplication发出的事件,如上述生命周期事件。在Swift中,...
#### 代码分析 ### AppDelegate.h ```objective-c // 导入UIKit框架 #import // 声明MyViewController类 @class MyViewController; // 定义MyAppDelegate类,该类遵循UIApplicationDelegate协议 @interface ...
在iOS应用开发中,`UIApplicationDelegate` 是一个至关重要的协议,它定义了应用程序对象与系统交互的方式,处理应用程序的生命周期事件。这个协议提供了多种方法,允许开发者在特定的时间点执行代码,比如应用程序...
Google Reporter 轻松将Google Analytics(分析)集成到您的iOS,macOS和tvOS应用中,而无需下载任何Google SDK。...class AppDelegate : UIResponder , UIApplicationDelegate { func application
#### 五、总结 通过上述方法的学习,我们可以更好地理解`UIApplicationDelegate`在iOS应用中的重要作用。正确地实现这些方法不仅可以提升应用的用户体验,还能有效地管理和控制应用的生命周期。希望本文能帮助开发者...
通过以上对`UIApplicationDelegate`协议的分析,我们可以看出它是控制应用程序生命周期的关键部分。正确实现这些方法不仅可以提升用户体验,还可以确保应用程序在不同状态下稳定运行。此外,对于多任务的支持、URL...
### 网络编程总结(iOS) 在网络编程领域,尤其是针对iOS平台开发的应用程序中,对网络连接状态的准确检测是非常关键的一个环节。这不仅能够提升应用的用户体验,还能够帮助开发者避免因为网络状态未被妥善处理而...
### iPhone程序的生命周期分析 #### 一、引言 在iPhone开发中,了解应用程序的生命周期至关重要。这不仅有助于开发者更好地管理资源,还能确保应用能够顺畅地响应用户操作和系统事件。本文将深入探讨iOS程序从启动...
这通常涉及到监听系统的活动事件,例如在Android中使用`ActivityLifecycleCallbacks`,在iOS中使用`UIApplicationDelegate`的方法。 2. **使用时长**:衡量的是用户在应用中花费的总时间,以分钟为单位。计算方法是...
在源码中,可能会看到UIApplicationDelegate的代理方法,如`application:didFinishLaunchingWithOptions:`,它是应用启动时最早被调用的方法,通常用于初始化应用的状态。 此外,iOS的 MVC(Model-View-Controller...
总结起来,`(OC)AppDelegate中启动UI`意味着我们需要在`AppDelegate`类的`didFinishLaunchingWithOptions:`方法中设置应用的初始用户界面,这通常包括创建`UIWindow`、设置根视图控制器,以及根据需求添加导航控制器...
在后台处理推送通知,你需要实现`UIApplicationDelegate`的`didReceive(_:withContentHandler:)`方法来处理接收到的通知: ```swift func application(_ application: UIApplication, didReceive ...
1. UIApplicationDelegate:新增的UIApplicationDelegate方法,如`applicationDidEnterBackground:`和`applicationWillEnterForeground:`,用于处理应用程序状态的转变。 2. multitasking APIs:苹果提供了多任务...
可以使用`UIApplicationDelegate.ApplicationDidReceiveMemoryWarning`方法处理内存警告,避免因内存不足导致的应用崩溃。 通过深入理解这些知识点,开发者可以更好地控制和优化Xamarin.iOS应用的启动过程,为用户...
例如,`UIApplicationDelegate`协议用于处理应用的启动、进入后台、恢复前台等事件,而内存管理则涉及ARC(Automatic Reference Counting)机制,确保对象在使用完毕后被正确释放。多线程技术如GCD(Grand Central ...
在实际应用开发中,协议常用于定义委托(Delegate)关系,如即将讨论的UIApplication与UIApplicationDelegate之间的关系。 每个iOS应用程序都包含一个`UIApplication`对象,它是整个应用程序的核心管理者。它负责...
总结来说,iOS平台从浏览器启动应用程序涉及到的关键技术包括Universal Links和Custom URL Schemes。开发者需要根据项目需求和用户群体选择合适的方式,同时注意安全性和用户体验的设计。在实际开发过程中,理解并...