【View Controller】Configuring the Initial View Controller at Launch

本文详细介绍了如何在iOS项目中使用主故事板来自动配置应用,包括实例化app delegate、创建窗口、加载主故事板及初始化视图控制器的过程。

If you define a main storyboard in your project, iOS automatically does a lot of work for you to set up your app.When your app calls theUIApplicationMainfunction, iOS performs the following actions:

  1. It instantiates the app delegate based on the class name you passed into theUIApplicationMainfunction.

  2. It creates a new window attached to the main screen.

  3. If your app delegate implements awindowproperty, iOS sets this property to the new window.

  4. It loads the main storyboard referenced in the app’s information property list file.

  5. It instantiates the main storyboard’s initial view controller.

  6. It sets the window’srootViewControllerproperty to the new view controller.

  7. It calls the app delegate’sapplication:didFinishLaunchingWithOptions:method. Your appdelegate is expected to configure the initial view controller (and its children, if it is a container viewcontroller).

  8. It calls the window’smakeKeyAndVisiblemethod to display the window. 



    The app delegate configures the controller

    <span style="font-size:18px;">- (BOOL)application:(UIApplication *)application
      didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
    UINavigationController *navigationController = (UINavigationController*)
      self.window.rootViewController;
          BirdsMasterViewController * firstViewController = [[navigationController
      viewControllers] objectAtIndex:0];
          BirdSightingDataController *dataController = [[BirdSightingDataController
      alloc] init];
          firstViewController.dataController = dataController;
    return YES; }
    </span>



    Creating the window when a main storyboard is not being used 


    <span style="font-size:18px;">- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard"
    bundle:nil];
        MainViewController *mainViewController = [storyboard
    instantiateInitialViewController];
        self.window.rootViewController = mainViewController;
        // Code to configure the view controller goes here.
        [self.window makeKeyAndVisible];
    return YES; }</span>


<think>我们被要求解释“Configuring the kernel”的含义,并按照规则输出相关问题。 根据之前的内核编译上下文,“Configuring the kernel”指的是内核配置阶段,即通过设置各种选项来决定内核的功能和模块。 我们将详细解释这一步骤,包括其目的、常用方法和注意事项。 最后,按照要求提出3-5个相关问题,并以“§§相关问题§§”开头,问题之间用换行分隔,但不分散(即连续列出)。</think>### 内核配置(Configuring the kernel)详解 #### 1. **核心概念** 内核配置是通过**选择性地启用/禁用功能模块**来定制Linux内核的过程。主要目标: - 🎯 精简内核体积(移除不需要的驱动/功能) - ⚙️ 优化性能(针对特定硬件) - 🔒 增强安全性(禁用潜在风险功能) - 🔋 减少资源占用(适合嵌入式设备) #### 2. **配置方法(常用命令)** | 命令 | 界面类型 | 适用场景 | |------------------------|---------------|-------------------------| | `make menuconfig` | 文本菜单 | 服务器/无图形界面环境 | | `make xconfig` | Qt图形界面 | 桌面环境(需安装Qt) | | `make gconfig` | GTK图形界面 | GNOME桌面环境 | | `make oldconfig` | 命令行 | 升级内核时保留原配置 | | `make localmodconfig` | 自动配置 | 根据当前加载模块自动精简 | #### 3. **关键配置文件** - `.config`:主配置文件(文本格式) - `arch/*/configs/`:架构默认配置 - `/proc/config.gz`:运行中内核的配置 #### 4. **配置内容示例** ```plaintext CONFIG_LOCALVERSION="-custom" # 自定义内核版本标识 CONFIG_MODULES=y # 启用模块加载功能 CONFIG_BLK_DEV_SD=y # 启用SCSI磁盘支持 CONFIG_USB_HID=n # 禁用USB输入设备(服务器场景) ``` #### 5. **操作流程** ```bash # 1. 进入源码目录 cd ~/linux-4.15.18 # 2. 启动配置界面 make menuconfig # 3. 配置保存路径 [ ] Save Configuration to an Alternate File (.config) # 默认保存为.config ``` #### 6. **配置原则** - ✅ **必选项**:当前硬件所需驱动(如SATA控制器) - ⚠️ **慎选项**:`DEBUG`/`EXPERIMENTAL`(可能降低性能) - ❌ **可禁用**: - 未使用的文件系统(Btrfs/ReiserFS) - 特殊硬件支持(游戏手柄/红外) - 虚拟化组件(非虚拟机环境) #### 7. **配置验证** ```bash # 检查配置完整性 make olddefconfig # 统计配置项 grep "^CONFIG_" .config | wc -l # 典型桌面配置:约5000项 # 精简服务器配置:约2000项 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值