控制器底层相关原理

作者: Tang_shuya | 来源:发表于2016-03-02 15:38 被阅读176次

// UIApplicationMain底层做事情

// 1.创建一个UIApplication对象,根据principalClassName创建

// 2.创建UIApplication代理对象,设置UIApplication代理

// 3.开启一个主要的事件循环,让程序一直运行,处理事件.

// 4.加载Info.plist文件,判断下有没有指定main.storyboard

intmain(intargc,char* argv[]) {

@autoreleasepool{

//第三个参数:principalClassName(字符串) nil == @"UIApplication"

//第三个参数,传递UIApplication类名或者它的子类名称字符串.

//第四个参数:delegateClassName(字符串),表示传递UIApplication代理的类型名称

returnUIApplicationMain(argc, argv,NSStringFromClass([UIApplicationclass]),NSStringFromClass([AppDelegateclass]));

// NSStringFromClass:把(Class)类名转换成类名字符串

// NSStringFromClass好处:1.防止输入错误的类名字符串2.输入的时候有提示

}

}

//程序启动完毕之后就会调用一次

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

1.创建UIWindow

self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

//设置UIWindow的背景颜色

self.window.backgroundColor = [UIColor redColor];

//让UIWindow显示出来(让窗口成为主窗口并且显示出来)

//一个应用程序只能有一个主窗口

[self.window makeKeyAndVisible];

//让UIWindow成为主窗口

//[self.window makeKeyWindow];

//2.再创建一个窗口

UIWindow*w2 = [[UIWindow alloc] initWithFrame:CGRectMake(100,100,200,200)];

w2.backgroundColor = [UIColor yellowColor];

[w2 makeKeyAndVisible];

self.w2 = w2;

//3.创建两个文本输入框

//3.1将文本输入框添加到window中

UITextField *tx1 = [[UITextField alloc] initWithFrame:CGRectMake(10,10,200,40)];

tx1.borderStyle = UITextBorderStyleRoundedRect;

[self.window addSubview:tx1];

//3.2将文本输入框添加到w2中

UITextField *tx2 = [[UITextField alloc] initWithFrame:CGRectMake(10,10,100,40)];

tx2.borderStyle = UITextBorderStyleRoundedRect;

[self.w2 addSubview:tx2];

//获取应用程序的主窗口

NSLog(@"%@", [UIApplicationsharedApplication].keyWindow);

returnYES;

}

代码说明:

再创建一个窗口(主窗口和次窗口的区别)

局部变量,需要定义一个Window属性来保存变量。

window的属性定义为strong,就是为了让其不销毁。

一个应用程序只能有一个主窗口,程序中创建了两个Window,那么谁是主窗口?后面的窗口能覆盖前面的窗口。

提示:如果UItextfield不显示,可以考虑设置它的样式,因为其创建默认是虚线的,没有边框。

在有storyboard中的创建过程:

先执行Main函数,执行UIApplicationMain(),根据其第三个和第四个参数创建Application,创建代理,并且把代理设置给application,根据项目配置文件info.plist里面的storyboard的name,找到对应的storyboard,接下来创建一个window,之后创建它的初始化控制器(就是箭头所指向的控制器),自动把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行后显示的界面。

注意这个控制器属性面板上的“初始化控制器属性”。

在没有storyboard中的创建过程:

先执行Main函数,执行UIApplicationMain(),根据其第三个和第四个参数创建Application,创建代理,并且把代理设置给application,开启一个事件循环,当程序加载完毕,他会调用代理的didFinishLaunchingWithOptions:方法。在该方法中,会创建一个Window,然后创建一个控制器,并把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行后显示的界面。

相关文章

网友评论

    本文标题:控制器底层相关原理

    本文链接:https://www.haomeiwen.com/subject/joenkttx.html