app的启动入口Main函数:

int main(int argc, char * argv[]) {

@autoreleasepool {

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]))

}

}

先看UIApplicationMain方法的定义:

UIApplicationMain(int argc, char * _Nonnull * _Null_unspecified argv, NSString * _Nullable principalClassName, NSString * _Nullable delegateClassName)

UIApplicationMain 方法里面的参数是什么意思,又做了哪些操作呢?

1.argc:系统或者用户传入的参数

2.argv:系统或用户传入的实际参数

3.principalClassName:默认为nil,则表示为UIApplication,传入nil和传入UIApplication效果一样;这里传入的参数必须 是为UIApplication的子类。

4.delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议。

传入这些参数后UIApplicationMain主要做了四件事:

1.创建了一个application对象;

2.设置application的代理;

3.建立了一个事件循环(RunLoop);

4.读取info.plist 文件,NSMainNibFile属性读取

大概图示如下:

UIApplicationMain方法执行加载完毕后,AppDelegate会执行代理方法

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

如果没有使用storyboard进行开发,则需要在此方法里面创建UIWindow窗口,UIWindow继承于UIView,是应用程序中的第一个视图控件,设置完Farme及相关根控制器,一个空的项目即启动成功;

启动时间的优化:

在实际项目中可能添加很多第三方如导航,分享,第三方登录等功能,会在Appdelegate的启动代理方法里面做很多初始化,大量的方法文件在启动时加载初始化,会影响app的启动时间,影响用户体验,这里怎么去优化呢?

我们先把启动时间分为两个部分:T1(执行main函数前)+T2(main函数后),{T1:系统环境布局时间:创建进程,加载解析可执行文件(库加载,堆栈环境配置等等),T2:从main到第一个界面显示的时间}

1.库加载越多,启动越慢;

2.Objc类越多,启动越慢;

3.静态对象全局对象越多,启动越慢;

4.Objc的 +load越多,启动越慢;

前面T1(1,2,3)我们可以在开发过程中,尽量去减少不需要的库文件,及相关无效的变量进行优化;

T2部分的优化我们更能把控,

1. +load方法尽量避免使用,如果非要使用里面的逻辑操作一定要少,因为+load方法是在main函数以前就会去调用加载;

2.在启动过程中,可以把一些耗时的操作或者一些第三方的初始化配置移到子线程执行。

iOS项目启动及启动时间优化的更多相关文章

  1. iOS LaunchScreen启动图设置

    新建的iOS 项目启动画面默认为LaunchScreen.xib 如果想实现一张图片作为启动页,如下图 如果启动不行  记得clear 一下工程 是启动页停留一段时间  只需要在 AppDelegat ...

  2. iOS 项目优化

    前言 iOS性能优化系列篇之"优化总体原则" 不要提前过度优化 要找到性能瓶颈 要在不同性能指标间权衡 要理解优化任务的底层运行机制 要有技术保障体系 一.启动速度优化 1.1 学 ...

  3. iOS 启动时间优化

    在 WWDC 2016 上首次提到了关于 App 应用启动速度优化的话题:Session 406 Optimizing App Startup Time. 一.冷启动与热启动 热启动是,APP会恢复之 ...

  4. ios项目里扒出来的json文件

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  5. IOS 项目问题总结

    把自己项目中遇到的问题总结一下,供大家参考,希望大家多多提出意见!! 在Xcode 6.2中遇到Your build settings specify a provisioning profile w ...

  6. 【Java】关于项目启动大请求量高负载时如何确保db等资源不出错的问题

      如果一个项目启动时(单机), 瞬间来了1000个访问, 如何确保db等资源不会压垮呢? 现在想想我当时回答的并不好, 而现在看公司框架才发现其实有针对于这一块做过专门的优化的.下面就来分享下公司关 ...

  7. 马蜂窝 iOS App 启动治理:回归用户体验

    增长.活跃.留存是移动 App 的常见核心指标,直接反映一款 App 甚至一个互联网公司运行的健康程度和发展动能.启动流程的体验决定了用户的第一印象,在一定程度上影响了用户活跃度和留存率.因此,确保启 ...

  8. 开源 iOS 项目分类索引大全 - 待整理

    开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...

  9. 现有iOS项目集成React Native过程记录

    在<Mac系统下React Native环境搭建>配置了RN的开发环境,然后,本文记录在现有iOS项目集成React Native的过程,官方推荐使用Cocoapods,项目一开始也是使用 ...

随机推荐

  1. centos使用ngnix代理https

    自己建web服务器,考虑到安全问题需要用到https. 在此使用nginx的反向代理功能实现https 腾讯云证书安装指引 ssl.conf 配置 // http请求重定向https server { ...

  2. ASP.NET MVC学习笔记 第二天

    创建视图      返回给客户端的HTML代码最好通过视图指定.视图都在Views文件夹中定义.ViewsDemo控制器的视图需要一个ViewsDemo子目录,这是视图的约定.      可以把多个控 ...

  3. 立即抢注我的免费1T云空间

    立即抢注我的免费1T云空间 在IDC行业中,有许多的免费空间,而真正的免费空间又能有多少?我是一个草根站长,说实话,为了寻找一个很好的免费空间,我在网上找了好多,几乎所有的免费空间都用过,但当网站运行 ...

  4. 两种开源聊天机器人的性能测试(二)——基于tensorflow的chatbot

    http://blog.csdn.net/hfutdog/article/details/78155676 开源项目链接:https://github.com/dennybritz/chatbot-r ...

  5. Python问题1:IndentationError:expected an indented block

    Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的python程序员,也可能陷入陷阱当中.最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分 ...

  6. JDBC连接数据库反射实现O/R映射

    测试preparedStatement public void testPreparedStatement(){ Connection connection=null; PreparedStateme ...

  7. python之路——网络基础

    你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好.但是如果这两个程序之间想要传递一个数据,你要怎么做 ...

  8. Python学习---重点模块的学习【all】

    time     [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...

  9. 使用事务和SqlBulkCopy批量插入数据

    SqlBulkCopy是.NET Framework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其他数据源的数据有效批量的加载到SQL Server表中的功能 ...

  10. Who are you, What is the science

    Please read:  地球月球有多大? 我们乃至我们赖以生存的地球, 甚至是我们硕大的银河系放到茫茫大宇中真的不过是一粒尘埃, 我们司空见惯的事物,我们习以为常的生活,我们笃定信奉的科学, 是不 ...