iOS的APP的启动原理和布局(业务拆分和C弱化降低耦合)

本文深入解析iOS APP启动过程,从main函数入手,详细阐述UIApplicationMain函数的作用,包括应用程序对象与代理的设置,主运行循环与事件接收,以及info.plist文件加载。同时,讨论了AppDelegate的业务拆分策略与APP启动时间优化方案,为开发者提供实用的性能提升技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

APP的启动原理

  • 我们知道程序的入口是mian函数
int main(int argc, char * argv[]) {
 
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([CCAppDelegate class]));
    }
    
}

从上面的函数中我们可以看出有4个参数,我们主要来说说第三个和第四个参数

第三个参数:设置应用程序对象名称UIApplication或者它的子类,如果nil,测默认是UIApplication对象

第四个参数:应用程序的代理名称,这个地方可以更改自己定义的代理方法,要遵循 UIApplicationDelegate协议,实现协议方法
从上面的方法中 我们可以看到,我更改了其代理的名称CCAppDelegate

在这里插入图片描述

  • 启动原理

1.执行mian行数(程序的入口函数)

2.执行UIApplicationMain函数,创建UIApplication对象,设置UIApplication的代理

3.设置主运行循环(死循环),接受事件

4.加载info.plist文件,如果plist指定main(NSMainNibFile)或者xib文件,就去加载这个文件

5.程序启动完毕,通知代理(AppDelegate),应用程序启动完毕

在这里插入图片描述

AppDelegate的业务拆分

  • 如果AppDelegate需要执行或者配置文件很多的话,不方便我们管理和查找
  • 比如:启动广告页,激光推送,即时通讯类的配置,分享等,这时我们需要给AppDelegate 扩展出分类,方便我们管理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

APP启动时间优化

APP启动事件可以分为2个T1 + T2
  • T1是指在执行main函数之前,主要是+(void)load;方法,这个方法是:文件加载内存的时候就被调用

在这里插入图片描述

从上面的图中我们可以看到,会加载main上面的的文件,及会执行里面的load,所以要尽量避免使用这个方法,如果必要可以用+(void)initialize代替

  • T2是指程序启动的时间优化,如果AppDelegate的配置文件过多,可以先让主线程加载主要的配置方法,其他的放到子线程中去
    • T2中还包含 pch预编译文件加大时长,其实这个在Xcode的时候,苹果是不建议使用的,静态ku,第三方的编译文件等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值