iOS 【应用程序app运行原理-UIApplication-AppDelegate.m-UIApplicationMain】

要了解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="https://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="https://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="https://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程序整个启动流程,如下图:

       


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值