• [转]UIApplicationDelegate分析小结


    转载地址: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
    复制代码
    本想记录下应用委托类的用法,结果复习了一下应用程序的启动过程。
  • 相关阅读:
    Docker 学习笔记
    Docker 镜像加速器(如何加速下载)
    Simple-DQN代码的理解笔记
    c语言NULL和0区别及NULL详解
    C 语言的 const 指针,指针的const有什么不同
    Edge和Level触发的中断
    尚硅谷设计模式笔记-适配器模式
    nginx服务器部署dist文件夹
    nginx服务器部署dist文件夹
    Jexl表达式引擎-根据字符串动态执行JAVA.md
  • 原文地址:https://www.cnblogs.com/csshaw/p/3789168.html
Copyright © 2020-2023  润新知