iOS开发之main函数参数的解析
2016-08-29 18:38
176 查看
在工程的Supporting Files文件夹中,有一个main函数
AppDelegate是应用程序委托对象,它继承于UIResponder,并且遵循了UIApplicationDelegate协议
应用程序的生命周期
以下是遵循方法UIApplicationDelegate协议实现的方法
应用启动并进行初始化的时候会调用该方法,并发出通知。在这个阶段会初始化根视图控制器。
创建一个AppD类,替换NSStringFromClass([AppDelegate class])中的AppDelegate,让AppD作为UIAplication的委托对象
int main(int argc, char * argv[]) { @autoreleasepool { /** * argc,argv是C标准main函数的参数,直接传递给UIApplicationMain进行相关处理即可; principalClassName:指定应用程序类,该类必须是UIApplication类或其子类。如果为nil,则用UIApplication类作为默认值 delegateClassName:指定应用程序类的代理类,该类必须遵循UIApplicationDelegate协议,此函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性。UIApplication对象会依次给delegate对象发送不同的消息,接着会创建应用程序的main runloop(事件循环),进行事件的处理(首先会调用delegate对象的 application:didFinishLaunchingWithOptions : ) 程序正常退出时这个函数才返回。 UIApplication 对象管理事件循环和高层的应用行为 应用委托是应用的核心,该对象与UIApplication对象联合起来负责对应用的初始化过程、状态迁移过程和很多高层的应用事件进行处理 */ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }
AppDelegate是应用程序委托对象,它继承于UIResponder,并且遵循了UIApplicationDelegate协议
#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @end
应用程序的生命周期
/** * * 作为应用程序的委托对象,AppDelegate类在应用的生命周期的不同阶段会回调不同的方法 * * 此类本身没有任何功能代码,它的作用就是实现了UIAplication和iOS操作系统之间的协议。该协议的方法就对应UIAplication在操作系统中的各种状态。 * iOS应用的五种状态: * Not Runing(非运行状态) 应用没有运行或者被系统终止 * Inactive(前台非活跃状态) 应用进入前台状态,但是还不能接收事件处理 * Active(前台活跃状态) 应用进入前台状态,能接收事件处理 * Background(后台状态) 应用进入后台状态,依然能够执行代码。如果有可以执行的代码,就会执行代码,如果没有可以执行的代码或者将可执行的代码执行完毕,应用就会马上进入挂起状态。 * Suspended(挂起状态) 应用进入一种‘冷冻’状态,不能执行代码。如果系统的内存不足,应用会被终止。 */
以下是遵循方法UIApplicationDelegate协议实现的方法
//应用启动并进行初始化的时候会调用该方法,并发出通知。在这个阶段会初始化根视图控制器。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"应用启动并进行初始化"); return YES; } //应用从活跃状态到非活跃状态时调用该方法,并发出通知。这个阶段可以保存UI状态。 - (void)applicationWillResignActive:(UIApplication *)application { NSLog(@"应用从活跃状态到非活跃状态"); } //应用进入后台时调用该方法并发出通知。这个阶段可以保存用户数据,释放一些资源。 - (void)applicationDidEnterBackground:(UIApplication *)application { NSLog(@"应用进入后台"); } //应用进入前台,但是还没处于活跃状态时调用方法并发出通知。这个阶段可以恢复用户数据。 - (void)applicationWillEnterForeground:(UIApplication *)application { NSLog(@"应用进入前台,但是还没处于活跃状态"); } //应用进入前台,处于活跃状态调用该方法并发出通知,这个状态可以保存UI状态。 - (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"应用进入前台,处于活跃状态"); } //应用终止时调用该方法。 - (void)applicationWillTerminate:(UIApplication *)application { NSLog(@"应用终止"); }
应用启动并进行初始化的时候会调用该方法,并发出通知。在这个阶段会初始化根视图控制器。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSLog(@"应用启动并进行初始化"); //初始化一个window对象 self.window = [[UIWindow alloc] init]; //创建一个screen并取其bounds属性再赋值给window的frame属性 self.window.frame = [UIScreen mainScreen].bounds; //设置窗口背景颜色backgroundColor self.window.backgroundColor = [UIColor yellowColor]; //使当前的窗口作为主窗口并显示在屏幕最前端 [self.window makeKeyAndVisible]; //把ViewController的对象作为window的根视图控制器(rootViewController),没有则会报错 self.window.rootViewController = [[ViewController alloc] init];//不带xib的方法 //切换根视图控制器,让AViewControler作为window的根视图控制器(AViewControler是新创建的一个类,下面BViewController同理) self.window.rootViewController = [[AViewControlerViewController alloc] init];//没有设置颜色,默认为黑色 //带xib的方法,在创建时选中‘Also creat XIB file’ BViewController *bVC = [[BViewController alloc] initWithNibName:@"BViewController" bundle:[NSBundle mainBundle]]; self.window.rootViewController = bVC;
创建一个AppD类,替换NSStringFromClass([AppDelegate class])中的AppDelegate,让AppD作为UIAplication的委托对象
//需要遵循协议 @interface AppD : UIResponder<UIApplicationDelegate> //创建window属性 @property (nonatomic,strong)UIWindow *window; @end //在AppD实现文件 //应用启动并进行初始化的时候会调用该方法,并发出通知。在这个阶段会初始化根视图控制器。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ //初始化window对象 self.window = [[UIWindow alloc] init]; //设置大小 self.window.frame 9ef6 = [UIScreen mainScreen].bounds; //设置当前window为主窗口并显示在最前端 [self.window makeKeyAndVisible]; //创建ViewController对象,这是初始化一个什么控件都不带的对象 ViewController *vc = [[ViewController alloc] init]; //通过UIStoryboard创建一个storyboard对象 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; //实例化一个ViewController对象,并带有一些需要的控件 ViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"];//(storyboard导航面板/Show the identity inspector/storyboard ID) //添加根视图控制器 self.window.rootViewController = vc; return YES; }
相关文章推荐
- IOS开发---菜鸟学习之路--(二十一)-利用正则表达式解析URL获取其中的参数
- IOS开发中使用GDataXmlNode解析xml
- [转]iOS开发教程:Storyboard全解析-第一部分01
- iOS开发教程:Storyboard全解析-第一部分
- iOS开发解析XML
- 督导系统iOS开发解析XML
- main函数参数解析
- 【iOS开发】协议与委托 (Protocol and Delegate) 实例解析
- iOS开发教程:Storyboard全解析-第一部分
- iPhone开发笔记(9)ASIHttpRequest和json-framework实现json解析(iOS客户端)
- 【iOS开发】协议与委托 (Protocol and Delegate) 实例解析(转)
- iOS开发教程:Storyboard全解析-第一部分02
- iOS开发教程:Storyboard全解析-第二部分
- iOS开发教程:Storyboard全解析-第一部分
- iOS开发教程:Storyboard全解析-第二部分
- IOS开发系列——xml文件解析
- iPhone开发笔记(9)ASIHttpRequest和json-framework实现json解析(iOS客户端)
- IOS开发的项目中XX_Prefix.pch解析
- iOS开发教程:Storyboard全解析-第二部分
- main函数参数解析