Info.plist、Pch文件、UIApplication、UIApplicationDelegate、IOS程序的启动过程


title : Info.plist、Pch文件、UIApplication、UIApplicationDelegate、IOS程序的启动过程
category : IOS


项目中常用的文件

标签(空格分隔): IOS


[TOC]

Info.plist和pch文件的作用

Info.plist文件

  • 该文件对工程做一些运行期的配置,非常重要,不能删除
    • Bundle Name:项目名称
    • Bundle Identifier:应用的唯一标识,一般用域名的反写
    • Bundle version string short:app的正式版本,上传到AppStore的版本必须大于前一个版本
    • Bundle version:内部测试版本
    • Main StoryBoard file base name:标识应用程序已启动首先加载名为main的storyBoard(main.storyboard)
    • 还有一个InfoPlist.strings文件,该文件是用于做本地化处理的文件

PCH文件

  • pch头文件中的内容能被项目中的其他所有源文件共享和访问
  • pch文件的应用场景
    • 用来定义一些全局的宏
    • 用来导入一些全局都能用到的头文件
    • OBJC这个宏,只在所有的.m和.mm文件中默认就定义了这个宏
    • 如果一个全局的头文件或宏只需要在.m或者.mm文件中使用,就把该头文件或宏写到下面的宏定义中。如果
#ifdef __OBJC__
// 写到这里
#endif
  • 自定义NSLog
#ifdef DEBUG // 调试阶段
#define JLLog(...) NSLog(__VA_ARGS__)
#else // 发布阶段
#define JLLog(...)
#endif

UIApplication的常见使用

  • 一个UIApplication代表着一个应用程序,而且application是一个单例
  • 通过[UIApplication sharedApplication]可以获得这个单例对象
  • IOS程序启动后创建的第一个对象就是UIApplication对象
  • 利用UIApplication对象,能进行一些应用级的操作

eg:

UIApplication *application = [UIApplication sharedApplication];
// 给应用图标上添加一个消息提醒数字
application.applicationIconBadgeNumber = 998;
// 设置状态栏的联网动画
application.networkActivityIndicatorVisible = YES;
// 控制状态栏样式(可以统一控制全局一样)
// 注意这里需要修改Info.plist文件
// 添加一个属性View controller-based status bar appearance 设置为 NO
application.statusBarStyle = UIStatusBarStyleLightContent;
// 设置状态栏是否隐藏
application.statusBarHidden = YES;

// openURL:方法
// 打电话
[application openURL:[NSURL URLWithString:@"tel://10086"]];
// 发短信
[application openURL:[NSURL URLWithString:@"sms://10086"]];
// 发邮件
[application openURL:[NSURL URLWithString:@"mailto://[email protected]"]];
// 打开一个网页资源
[application openURL:[NSURL URLWithString:@"http://www.yuanjunliang.cc"]];
// 打开其他app程序

AppDelegate的代理方法

  • 在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate对象来处理这些系统事件
  • delegate可处理的事件包括:
    • 应用程序的生命周期事件(如程序的启动和关闭)
    • 系统事件(如来电)
    • 内存警告

IOS程序的启动过程

Info.plist、Pch文件、UIApplication、UIApplicationDelegate、IOS程序的启动过程_第1张图片
IOS程序启动过程.png
1 打开程序
2 执行main函数
3 执行UIApplicationMain函数,并创建UIApplicationDelegate对象
  • 4 delegate对象开始处理(监听)系统事件(没有storyBoard)

    • 程序启动完毕的时候,就会调用代理的didFinishLaunchingWithOptions方法
    • 在didFinishLaunchingWithOptions方法中创建UIWindow
    • 创建和设置UIWindow的rootViewController
    • 显示窗口
  • 4.根据Info.plist获得最主要的storyBoard的文件名,加载最主要的storyBoard(有storyBoard)

    • 创建UIWindow
    • 创建和设置UIWindow的rootViewController
    • 显示窗口

UIApplicationMain

  • main函数执行了一个UIApplicationMain这个函数
int UIApplicationMain(argc, argv, NSString *principalClassName, NSString *delegateClassName));

1. principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类),如果为nil,则用UIApplication类作为默认值

2. delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议

UIWindow

// 让window成为主窗口,并显示出来
[self.window makeKeyAndVisible];
// 让window成为主窗口,当并不显示出来
[self.window makeKeyWindow];

// 获取应用程序的主窗口
[UIApplication sharedApplication].keyWindow;
  • UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow
  • IOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了
  • 一个IOS程序之所以能显示到屏幕上,完全是因为它有UIWindow

UIApplicationDelegate中代理方法的作用


// 当应用程序启动完毕的时候就会调用(只是在启动的时候调用)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return YES;
}

// 应用程序即将失去焦点的时候调用(不可交互的时候调用)
- (void)applicationWillResignActive:(UIApplication *)application {
}

// 应用程序进入后台的时候调用
// 一般在该方法中保存应用程序的数据以及状态
- (void)applicationDidEnterBackground:(UIApplication *)application {
}

// 应用程序即将进入前台的时候调用
// 一般在该方法中回复应用程序的数据以及状态
- (void)applicationWillEnterForeground:(UIApplication *)application {
}

// 重新获取焦点(能够和用户交互)
- (void)applicationDidBecomeActive:(UIApplication *)application {
}

// 应用程序即将被销毁的时候回调用该方法
// 注意,如果应用程序处于挂起状态的时候无法调用该方法
- (void)applicationWillTerminate:(UIApplication *)application {

}

// 当接收到内存警告的时候调用
// 一般在该方法中释放掉不需要的内容,否则系统可能会强制关闭应用
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    
}


你可能感兴趣的:(Info.plist、Pch文件、UIApplication、UIApplicationDelegate、IOS程序的启动过程)