iOS 【应用程序app运行原理-UIApplication-AppDelegate.m-UIApplicationMain】
来源:互联网 发布:股市模拟交易软件 编辑:程序博客网 时间:2024/05/17 02:37
要了解iOS应用启动的原理,首先我们先要了解一个类,那就是 UIApplication。
重点标记的三句话着重理解一下:
①象征;②启动后创建的第一个对象;③应用级别操作
然后我们来看一下UIApplication的几个重要的功能。
在新建项目的时候,会出现这两个class文件:AppDelegate.h、AppDelegate.m
这是什么?之前转载过一个博客,下面我用自己的理解解释一下这两个文件。(非常重要)
先看一下两个class的代码:
//// AppDelegate.h//#import <UIKit/UIKit.h>#import <CoreData/CoreData.h>//遵守UIApplicationDelegate协议,AppDelegate类就是UIApplication的协议@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;- (void)saveContext;- (NSURL *)applicationDocumentsDirectory;@end
//// AppDelegate.m (只保留了重要部分)//#import "AppDelegate.h"@interface AppDelegate ()@end@implementation AppDelegate//程序启动完成调用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"程序启动完成调用"); //提醒数字(下图有示例) application.applicationIconBadgeNumber = 10; //网络提醒(下图有示例) application.networkActivityIndicatorVisible = YES; //图一 //<img src="http://img.blog.csdn.net/20151128110835687?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" height="447" width="711" alt="" /> //隐藏状态栏 application.statusBarHidden = YES; //状态栏的样式 application.statusBarStyle = UIStatusBarStyleLightContent; 另外,我们需要注意的是,在AppDelegate.m中来管理状态栏的时候,需要将控制器管理状态关闭:(这里也要注意一下,这个操作只是对 “隐藏状态栏” 和 “状态栏的样式修改” 这两个操作有用。而 提醒数字 和 网络延迟提醒 这两个是无关的。一旦关闭,在ViewController.m内设置状态栏隐藏和状态栏样式都是无用的) <img src="http://img.blog.csdn.net/20151128111322268?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" height="351" width="841" alt="" /> return YES;}//应用程序将要失去焦点(回到主界面,此时无法和当前run的程序交互)- (void)applicationWillResignActive:(UIApplication *)application { NSLog(@"应用程序将失去焦点");}//进入到后台(比如说回到主界面,此时也是失去焦点)- (void)applicationDidEnterBackground:(UIApplication *)application { NSLog(@"进入到后台");}//应用显示到前台(回到当前应用程序界面)- (void)applicationWillEnterForeground:(UIApplication *)application { NSLog(@"应用显示到前台");}//程序获取焦点(意味着程序可以和用户交互)- (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"程序获取焦点");}//程序结束退出- (void)applicationWillTerminate:(UIApplication *)application { NSLog(@"程序结束退出");//(程序退出时调用,但是这个NSLog是无法输出的。但不代表这个代理方法没有调用) [self saveContext];//上面这几个都是程序启动过程中的一些代理方法,在整个过程中进行运行。比如说我们现在先启动一下这个程序,然后我们再退回到主界面。我们看一下这几个输出语句的输出顺序 //图二 //<img src="http://img.blog.csdn.net/20151128110856469?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" height="164" width="471" alt="" />}
上面的代码中有两个图没有显示,在这里补上:
图一:(提醒数字、网络延迟标识)
图二:(启动程序时NSLog验证语句)
另外给大家介绍一个方法:
在介绍一个UIApplicationMain,程序开始运行时最最开始是先进入到这个类中的:
如图:
总结一下iOS程序整个启动流程,如下图:
6 0
- iOS 【应用程序app运行原理-UIApplication-AppDelegate.m-UIApplicationMain】
- 48-程序启动过程原理UIApplication的代理(AppDelegate),UIApplicationMain底层
- iOS-UIApplicationMain以及UIApplication职责
- ios uiapplication 代理appdelegate
- iOS程序结构APPDelegate&UIApplication
- IOS程序启动原理(启动过程)、UIApplication(main.m与自动生成的AppDelegate代理)
- APP 启动过程、UIApplication、APPDelegate
- IOS AppDelegate.m 详解
- IOS AppDelegate.m 详解
- [IOS]AppDelegate.m
- IOS AppDelegate.m 详解
- IOS AppDelegate.m 详解
- iOS 【AppDelegate.h/.m】
- UIApplication、AppDelegate
- iOS 开发 AppDelegate.m 解说
- IOS AppDelegate.m 函数说明
- iOS UIApplicationMain
- UIApplication、AppDelegate、委托
- UI-Label自动垂直滚动字幕
- 文件的操作
- C语言实现字符串函数
- openflow简介
- 【Ajax 3】JavaScript封装Ajax
- iOS 【应用程序app运行原理-UIApplication-AppDelegate.m-UIApplicationMain】
- c++11,std::find的并行化模板化
- 前端工程化和Reactjs的模式
- unity3D 实现NGUI物体朝鼠标点击位置移动
- Java8の字符串操作
- Arduino- 编译引用 IRremote 出现 error: ‘TKD2′ was not declared in this scope
- 使用此函数添加任意数量的load事件处理函数
- 【已解决】Xen下虚拟机执行Shutdown失败,开机自动重启虚拟机,并出现页故障问题
- SlidingMenu-jar包