Info.plist文件
程序运行的配置文件,不能删除(修改了infoplist文件,模拟器应用要删除,程序要clean),该文件的图形化配置界面就是直接点击项目,主界面配置。
bundledisplayname:程序名称
bundleID:上架标识
bundleversionstring:正式版本
bundleversion:内部版本
mainstoryboard:程序启动加载的storyboard
InfoPlist.strings
与Info.plist本地化有关
pch
是个头文件,能被项目中所有源文件共享和访问,一般用来定义一些全局的宏
__OBJC__项目中.m和.mm文件中默认都定义了这个宏,如果全局的头文件或者宏只在.m和.mm文件中使用,就写到这个宏中。在这个宏中定义Log,这样发布时注释掉所有Log比较方便
#define Log(...) NSLog(__VA_ARGS__)
发布时,注释掉此句如下
#define Log(...) // NSLog(__VA_ARGS__)
综上,可以写为
#ifdef DEBUG
#define Log(...) NSLog(__VA_ARGS__)
#else
#define Log(...)
#endif
UIApplication
每个应用都有自己的UIApplication,单例模式,和Android中一样UIApplication *sharedApplication = [UIApplication sharedApplication];可以获取这个单例,程序启动第一个创建的对象就是UIApplication对象
APPDelegate
app中断时会产生些系统事件,UIApplication会通知它的delegate来处理这些事件,包括
1、应用程序的生命周期事件
applicationdidFinishLaunchingWithOptions(app启动完毕时调用)
applicationWillResignActive(失去焦点时调用)
2、系统事件(来电,点击home等)
applicationDidEnterBackground(app进入后台时调用,一般用来保存应用程序的数据及状态)
applicationDidEnterForground(app进入前台时调用,一般用来恢复应用程序的数据及状态 )
3、内存警告
applicationDidReceiveMemoryWarning(app接受到内存警告时调用)
程序启动过程
1、执行main函数
2、UIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegate class])));//用户传入的参数个数、用户传入的参数、 NSString *principalClassName:指定应用程序类名,该类必须是UIApplication或子类,如果为nil,默认为UIApplication、NSString *delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议
3、根据后两个参数,创建UIApplication对象和对象代理
4、开启事件循环(队列),监听系统事件
UIWindow
是一个特殊的UIWindow,在一个app中只有一个主UIWindow,程序启动创建的第一个视图控件就是UIWindow,然后创建控制器的view,接着将控制器的view添加到UIWindow上。创建一个空项目时,可以在APPDelegate中看到启动代码。
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
设置根控制器
(见UINavigationController中)
UIWindow成为主窗口
[self.window makeKeyAndVisible];
UINavigationController
导航控制器通过栈来管理子控制器
1、创建导航控制器
UINavigationViewController *nav = [[UINavigationViewController alloc] init];
2、设置根控制器,这个控制器将启动
self.window.rootViewController = nav;
3、将第一个创建的控制器添加到导航控制器中
OneViewController *one = [[OneViewController alloc] init];
[nav pushViewController:one animated:YES];
或者
OneViewController *one = [[OneViewController alloc] init];
UINavigationViewController *nav = [[UINavigationViewController alloc] initWithRootViewController:one];
self.window.rootViewController = nav;