程序运行时会先走main函数,我们先看一下main函数吧:
#import <UIKit/UIKit.h> #import "AppDelegate.h" //程序的主入口 int main(int argc, char * argv[]) { //自动内存释放池 @autoreleasepool { //UIApplicationMain UIKit框架的启动函数 //参数1.argc 启动时带有参数的个数 //p2.argv 参数列表 //p3.nil 空指针 要求传入一个主框架类对象;如果为nil,系统就会默认的框架作为主框架类名 //p4.主框架的代理类对象名字 return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }
然后会走他的一些协议方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. //创建一个Window对象 //属于Appdelegate对象 // self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]]; self.window.backgroundColor = [UIColor yellowColor]; self.window.rootViewController = [ViewController new]; //window作为主视图并显示; [self.window makeKeyAndVisible]; return YES; }
在看一下ViewController里面:
#import "ViewController.h" @interface ViewController () @end @implementation ViewController //当试图控制器第一次加载的时候被调用 //布局初始化视图 - (void)viewDidLoad { //调用父类的加载视图的函数 [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = [UIColor orangeColor]; NSLog(@"viewDidLoad! 第一次加载函数"); } //当程序第一次运行的时候回先走viewDidLoad,并且只会加载一次,当视图在显示的时候就不会走这个方法了,而viewWillAppear视图每次显示都会调用(没有出现在屏幕上) -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; NSLog(@"视图将要显示"); } //视图已经在屏幕上显示了 -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; NSLog(@"视图已经显示"); } //视图将要消失(还没有消失,还在屏幕上) -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; NSLog(@"视图将要消失"); } //视图已经消失(已经不再屏幕之上) -(void)viewDidDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; NSLog(@"视图已经消失"); } //内存收到警告时会调用 - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end