一些基本概念
Info.plist 文件
项目的配置文件,项目中其他Plist文件不能带有“Info”这个字眼。
常见属性
Localiztion native development region(CFBundleDevelopmentRegion)-本地化相关
Bundle display name(CFBundleDisplayName)-app名称,限制在10-12个字符,如果超出,将被显示缩写名称
Icon file(CFBundleIconFile)-app图标,一般为Icon.png
Bundle version(CFBundleVersion)-app版本号,每次往App Store上发布一个新版本时,需要增加这个版本号
Main storyboard file base name(NSMainStoryboardFile)-主storyboard文件的名称
Bundle identifier(CFBundleIdentifier)-app的唯一标识,部署到真机时用到
pch文件
pch头文件的内容能被项目中的其他所有源文件共享和访问
一般在pch文件中定义一些全局的宏
UIApplication
UIApplication对象是应用程序的象征
每一个应用都有自己的UIApplication对象,而且是单例的
通过[UIApplication sharedApplication]可以获得这个单例对象
利用UIApplication对象,能进行一些应用级别的操作。
获取对象:UIApplication *app = [UIApplication sharedApplication];
设置应用程序图标右上角的红色提醒数字
@property(nonatomic) NSInteger applicationIconBadgeNumber;
设置状态栏左上角联网指示器的可见性
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
设置状态栏
从iOS7开始,系统提供了2种管理状态栏的方式
通过UIApplication管理(一个应用程序的状态栏都由它统一管理)
通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)
// [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
// app.statusBarHidden = YES;
// app.statusBarStyle = UIStatusBarStyleLightContent;
[app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
设置图标右上角的数字,0代表清除数字
// app.applicationIconBadgeNumber = 0;
第三方应用打开网页,邮件,电话等
// [app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];
// [app openURL:[NSURL URLWithString:@"tel://10086"]];
// [app openURL:[NSURL URLWithString:@"sms://10086"]];
// [app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]];
AppDelegate类,UIApplication的代理
/**
* app启动完毕后就会调用
*/
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{return YES;}
// 程序将要失去Active状态进入后台时调用,比如按下Home键或有电话信息进来
- (void)applicationWillResignActive:(UIApplication *)application{}
/**
* app进入后台的时候调用
* 一般在这里保存应用的数据(游戏数据,比如暂停游戏)
*/
- (void)applicationDidEnterBackground:(UIApplication *)application{}
/**
* app将要进入前台的时候调用
启动第一次程序并没有调用WillEnterForeground这个方法。
*/
- (void)applicationWillEnterForeground:(UIApplication *)application{}
//已经变成前台时调用
- (void)applicationDidBecomeActive:(UIApplication *)application{}
/**
清除不需要再使用的内存
*/
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{}
//当一个程序将要正常终止时会调用,但是如果长主按钮强制退出,则不会调用该方法
- (void)applicationWillTerminate:(UIApplication *)application{}
UIWindow
UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow
iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了
程序启动的完整过程
1.main函数
2.UIApplicationMain
- 创建UIApplication对象
- 创建UIApplication的delegate对象
3.分两种情况
没有使用storyboard的情况:
delegate对象开始处理(监听)系统事件
- 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法
- 在application:didFinishLaunchingWithOptions:中创建UIWindow
- 创建和设置UIWindow的rootViewController
- 显示窗口
使用storyboard的情况:
根据Info.plist获得最主要storyboard的文件名,加载最主要的storyboard
- 创建UIWindow
- 创建和设置UIWindow的rootViewController
- 显示窗口