项目初始化架构

  • 项目基本架构图

项目初始化架构_第1张图片
Snip20170911_1.png

程序启动时, 手动加载UIWindow

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
// Override point for customization after application launch.    
// 1.先创建window    
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor yellowColor];

// 2.加载控制器   
// 2.1通过xib添加,加载顺序 view -> viewController.xib -> 默认创建一个几乎透明的view;    
    UIViewController *vc1 = [[UIViewController alloc] init];   
// 指定加载xib    
    UIViewController *vc2 = [[UIViewController alloc] initWithNibName:@"xib的名字" bundle:nil];      
// 2.2通过storyBoard添加。    
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
// 2.2.1 storyBoard加载Identifier的标记的控制器。    
    [storyBoard instantiateViewControllerWithIdentifier:@"Identifier"];
// 2.2.2 storyBoard默认加载箭头指向的控制器。
    UIViewController *vc = [storyBoard instantiateInitialViewController];
      
// 3. 设置UIWindow的根控制器
    self.window.rootViewController = vc;
// 4. 将UIWindow显示出来    
    [self.window makeKeyAndVisible];    
    return YES;
}

  • 控制器的3种创建方式

方法一 alloc init 方法

    UIViewController *vc1 = [[UIViewController alloc]init]; 

方法二 storyboard
第一步:
新建storyboard和操作: 创建新的storyboard(新建文件 user interface 中的 storyBoard) 在新建的storyboard中添加控制器(storyboard就是为了添加控制器的) 给stoBoard设置入口初始化控制器 箭头指向 : Is Initial View Controller
第二步:
获取storyboard文件对象:(此处类似加载xib文件)

// bundle在尾,可以为nil,这里取storyboard文件只是为了根据文件找控制器
 UIStoryboard *board = [UIStoryboard storyboardWithName:@"ViewControllerOne" bundle:nil];   

// 初始化storyboard中的控制器 : 根据控制器的标识
UIViewController *rootVc = [board instantiateViewControllerWithIdentifier:@"tuhuangse"] 

方法三 xib : xib的本质就是一个View,原则上不能拖控制器,但实际上能直接拖控制器,但是控制器不能用

    第一部分: 创建UIViewController类文件
    
    第二部分: 新建xib和操作 : 新建xib ,拖入控件 , fileowner(在导航区)绑定Controller类文件,再连线View

    第三部分: 在appdelegate的程序启动完成方法中,根据fileowner绑定的Controller文件创建控制器(用loadnib的方法,确定要加载的View)

    创建xib的时候用empty,不然容易冲突

注意:当出现xib文件名与控制器名相同(为不加Controller的名,或者完全同名)时,加载xib可以不填写文件名:直接alloc init,此时加载xib的优先级,完全同名的优先级比较高.

初始化控制器的时候:
调用init方法,底层调用了initWithFrame方法
storyBoard或者xib加载的调用initWithCoder方法,解析文件;

控制器中的View是懒加载的 : (根据懒加载的特点:用到的时候才会创建来证明)

证明步骤 : 手动创建根窗口,在进行到将窗口设置为主窗口的方法前,都不会进入ViewdidLoad方法 / 但是如果在设置主窗口之前就设置控制器View的背景颜色,那么就会进入ViewdidLoad方法

你可能感兴趣的:(项目初始化架构)