我们开发出来的运行在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
本想记录下应用委托类的用法,结果复习了一下应用程序的启动过程。
附一份社会热点评论短文。
《史记. 切糕传》: 贩切糕者, 多为西域人也。富可敌国。其业暴利,因有民曰:「一两五十,一刀三斤。」更有甚者曰:「一刀杨幂上床, 两刀帝都买房,三刀兰博到手,四刀盖茨认娘」。 故欧美人遇奢侈且无力购买之物时大多惊呼:「哦,卖糕的!」
分享到:
相关推荐
The UIApplicationDelegate protocol declares methods that are implemented by the delegate of the singleton UIApplication object. These methods provide you with information about key events in an ...
UIApplicationDelegate提供了两种方法,可在用户打开应用程序时用来运行代码: applicationWillEnterForeground和applicationDidBecomeActive 。 但是以下两种方法都不适合这种情况: 首次启动应用程序时未调用...
Google Reporter 轻松将Google Analytics(分析)集成到您的iOS,macOS和tvOS应用中,而无需下载任何Google SDK。...class AppDelegate : UIResponder , UIApplicationDelegate { func application
6 UIApplication and UIApplicationDelegate 7 UIView and UIViewController 8 UITabBar and UITabBarController 9 UINavigationBar and UINavigationController 10 Tables Using UITableView and ...
还有一个实现UIApplicationDelegate协议的类,它绝对是一个控制器,但是是全局的。 让我们创建特定于具体屏幕(场景)的控制器,并将其称为AppControllerStates。 我们还调用UIApplicationDelegate实现App...
@interface PaomaAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; PaomaViewController *viewController; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property ...
@interface ImageProcessingAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; ImageProcessingViewController *viewController; } @property (nonatomic, retain) IBOutlet UIWindow *window...
示例用法只需将以下代码添加到您的UIApplicationDelegate方法-application:didFinishLaunchingWithOptions: ,您应该会在 Xcode 控制台中看到每个请求/响应的大量信息。 [[MCHTTPRequestLogger sharedLogger ] start...
在应用程序启动期间在UIApplicationDelegate中设置核心数据存储: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [CDMDataManager ...
**[1412:60b] You've implemented -[<UIApplicationDelegate> application:performFetchWithCompletionHandler:], but you still need to add fetch to the list of your supported UIBackgroundModes in your Info....
塞鲁(セル) ## Swift中的核心数据。 Seru(日语中的Cell)是Swift中干净漂亮... name = " Petter "}用法设置CoreData class AppDelegate : UIResponder , UIApplicationDelegate { lazy var seruStack = Seru () ...}
描述 为iOS 11编写的Uber克隆应用程序。模仿Uber的许多功能,以了解源代码...class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFi
然后执行pod install操作,文件拨号,请耐心等待pod 'YWVideoPlayer', '~> 1.0.3'2, AppDelegate.h文件中加入fullScreen属性,如下#import <UIKit>@interface AppDelegate : UIResponder <UIApplicationDelegate>@...
PangoPay SDK 一个用于连接到PangoPay API的SDK。...配置客户端的最佳位置是iOS上的+[UIApplicationDelegate didFinishLaunchingWithOptions] 。 在那里你可以打电话 [[PangoPayDataCacher sharedInstance]
CVK层级搜索器 CVKHierarchySearcher 是一个小型实用程序类,用于... 类依赖于-[UIApplicationDelegate window] ,如果失败,则使用-[UIApplication keyWindow] 。 这对我有用,但如果这需要某些类型的应用程序的另一
此示例使用 UIApplication 上的非正式协议来扩展 UIApplicationDelegate 以使其易于支持外部显示。 当外部显示器可用时,通过回调通知委托。 此时,应用程序可以决定哪些窗口应该附加到哪些屏幕上。
我们在集成sdk前需要到微信开放平台注册自己的应用,然后拿到对应的key...@interface AppDelegate : UIResponder <UIApplicationDelegate> 4.在AppDelegate.m中实现一下方法 (BOOL)application:(UIApplication *)applic
发粉( FuckXDesign ) 适用于iPhoneX“ M”形图案秃发的发粉。... import UIKitimport HairPowder@UIApplicationMainclass AppDelegate : UIResponder , UIApplicationDelegate { var window : UIWindow
您想知道什么很乏味吗? 如果没有正确的工具,则调试网络请求和响应。... Guppy将拦截并记录从应用发送...class AppDelegate : UIResponder , UIApplicationDelegate { var window: UIWindow ? func application ( _ ap