应用程序启动过程

-------------

UIApplication的delegate对象

应用程序被打扰  -》进入后台 -》时间长了随时被关闭

UIApplication对象通知delegate来处理一些事情

如:开启和关闭应用程序(应用程序生命周期事件)

来电提醒(系统事件)

内存警告

 UIApplicationDelegate 协议

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;

- (void)applicationDidEnterBackground:(UIApplication *)application;

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

id<UIApplicationDelegate> delegate

 

应用程序创建完成就已经有了 @interface AppDelegate:UIResponse<UIApplicationDelegate>对象并遵守了协议      ApplicationDelegate.h 和.m实现了代理方法 

#import <UIKit/UIKit.h>

@interface AppDelegate:UIResponse<UIApplicationDelegate>

@property (strong,nonatomic) UIWindow *window;

@end

 

文档搜索 apps states 讲解应用程序启动过程和状态 等  要看看

  inactive是即将进入active的前台时间很短     background 5秒钟内进入 suspended挂起状态   长时间挂起状态 程序可能被关闭not running 

xcode->硬件-》模拟内存警告

NJAppDelegate.m

 

----------------

ios程序启动过程和UIWindow

1、

int main(int argc, char * argv[])
{
    @autoreleasepool {
        /*
         argc: 系统或者用户传入的参数个数
         argv: 系统或者用户传入的实际参数
         
         */
        // return UIApplicationMain(argc, argv, nil, NSStringFromClass([NJAppDelegate class]));
        
        // return UIApplicationMain(argc, argv, @"UIApplication", NSStringFromClass([NJAppDelegate class]));
        
        /* 进入UIApplicatinMain方法的定义里看到说明如下:
         1.根据传入的第三个参数创建UIApplication对象
         2.根据传入的第四个产生创建UIApplication对象的代理
         3.设置刚刚创建出来的代理对象为UIApplication的代理
查看info.plist文件中的main storyboard file name 为 Main ->根据main.storyboard 创年vc.view 和vc -》程序加载完毕 4.开启一个事件循环
监听到程序加载完毕事件
UIApplication对象通知其delegate 执行didFinishLaunchingWithOptions (AppDelegate继承自ViewController)
5、self.window.rootViewController = vc赋值 */ return UIApplicationMain(argc, argv, @"UIApplication", @"NJAppDelegate"); //UIApplicationMain函数里有一个While循环 所以不会返回 否则程序就结束了 } }

 2、

 

3、事件放入队列中和入栈相反   UIApplication对象监听事件队列中的事件(包括didFinishLaunchingWithOptions:   singleView项目这个方法的部分代码是被苹果隐藏了,实际上是存在的,如果创建的是empty项目就可以知道被隐藏的代码是什么了)  队列是先先进先出  

4、UIApplication对象监听到程序加载完毕了 就通知appDelegate执行 didFinishLaunchingWithOptions方法

5、didFinishLaunchingWithOptions代码的系统真实实现步骤:

注:一下代码都在didFinishLaunchingWithOptions里执行,self为UIAppDelegate实例化对象 vc为自定义控制器对象(继承自UIViewController 有view属性对象了)

程 序加载完毕-》 被UIApplication对象监听到了 程序启动完毕事件 ->通知代理(AppDelegate实例)去执行-> didFinishLaunchingWithOptions-》self.window属性上赋值一个UIWindow对象    (self.window = [UIWindow alloc] init];)->

/******添加vc.veiw到self.window上

[self.window addSubview : vc.view] // 这种方法不正确   因为vc在这个方法(didFinishLaunchingWithOptions)里创建,出了这儿方法就被释放了  而不能监听vc.view上的button点击事件等。。

**推荐使用下面的方法

self.window.rootViewController = vc //这行代码执行后  在- (void)setRootViewController:(UIViewController *)vc 方法里

同样执行了 [self.window addSubView:vc.view];

*/

6、self.window makeKeyAndVisible// 让这个window成为主窗口 并显示

 

 

程序启动的完整过程
1.main函数

2.UIApplicationMain
* 创建UIApplication对象
* 创建UIApplication的delegate对象

3.delegate对象开始处理(监听)系统事件(没有storyboard)
* 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口

3.根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
* 创建UIWindow
* 创建和设置UIWindow的rootViewController
* 显示窗口

 

UIWindow

UIWindow继承自UIView 但是有一个特别的方法 makeKeyAndVisible (makeKey成为主窗口)  可以让view显示出来 

一个app中只有一个UIWindow(一个特殊的UIView)

UIVindow添加控制器view 控制器的view显示到屏幕上了

coca touch->uikit->guideLine ->uiview controller

AppDelegate对象的属性为UIVindow

 

UIApplication获取window的方法

[UIApplication sharedApplication].keyWindow;

 

只有ios6里面 主次窗口有区别  ios6里面只有主窗口才能接受到键盘输入事件

 

posted @ 2016-03-04 01:06  海龙王来了  阅读(124)  评论(0)    收藏  举报
友情链接:废钢破碎机  带式压滤机