一、APP的启动(分为两个阶段)1.1 pre-mainpre-main在main()函数之前,可分为四个阶段:1.dylibloading:加载动态库。可以通过减少动态库的数量来优化这一部分所消耗的时间。
苹果的建议是一个项目里面自己制作的动态库的数量不超过6个。
2. ObjCsetup:注册Objc类,进行selector唯一性检测等。可以通过减少Objc类的数量,减 少selector的
转载
2023-07-21 12:15:41
108阅读
一、“冷启动”与“热启动”冷启动:App点击启动前,此时App的进程还不在系统里。 需要系统新创建一个进程分配给App。(这是一次完整的App启动过程)热启动:App在冷启动后用户将App退回后台,此时App的进程还在系统里。 用户重新返回App的过程。(热启动做的事较少)二、App的完整启动流程(冷启动流程)1、main() 函数执行前(pre-main阶段)我们可以通过设置环境变量D
原创
2023-08-03 23:49:49
113阅读
如果你是一名 Mac 用户,那么你一定希望自己的电脑运行得更加流畅和高效。为了达到这个目的,系统优化软件是必不可少的工具。下面介绍了 10 款 Mac 上好用的系统优化软件。1、App Cleaner & Uninstaller:这是一款可以帮助你卸载不需要的应用程序的软件。它可以帮助你彻底地删除应用程序,包括相关文件和文件夹。2、DaisyDisk:这是一款磁盘空间管理软件,可以帮助你清
转载
2023-05-26 16:53:30
106阅读
应用的启动优化当我们参与到大型应用的时候 会遇到一些启动时间过长的情况 这时候就需要使用到相关的操作。 总结来说,main()方法调用前,启动过程大体分为如下步骤: 先是LLVM把项目翻译成IR文件然后到backendLLVM clangpre-mainmainbinding – 符号绑定rebase – 指针修复 (iOS14.3引进ASLR‘地址空间随机化’解决了虚拟内存从0开始的问题,物理内
一、接口请求优化在工程项目中,多个一级界面包含状态,如:服务入口的动态配置,未读消息数量,图片文字等,因此产品设计要每次切换 tab 时都请求数据,及时的更新页面状态。在实际开发中,频繁的调用接口,频繁的刷新界面显然是影响用户体验的,所以需要进行优化,优化的思路有以下几点:使用 loading + 默认灰色矩形视图;每隔 15s 以上才请求一次,防止频繁触发请求@property (nonatom
转载
2023-07-03 15:21:30
86阅读
一、使用instrument工具查看有无内存泄露,查找僵尸对象二、自定义内存检测工具 可在baseViewController里面重写dealloc方法,将释放的对象打印出来,如果pop之后没打印,说明这个控制器存在内存泄露,也可以利用runtime+分类的方式交换dealloc方法,打印出释放的对象。三、资源文件的优化
转载
2023-07-20 12:29:02
49阅读
之前项目开发过程中也有对内存进行优化,但是并没有进行系统的优化,更多是隔一段时间优化一些。最近自己总结了一些自己的心得体会分享给大家,希望大家能够多多批评指正。app内存优化方向降低运行内存峰值1、减少不必要单例的使用,尽可能减少单例对占内存较大对象的强持有 2、排查内存泄漏 3、降低图片缓存工具SDWebImage最大缓存值,保证必要的流畅性 4、大图尽量不要使用[UIImage image
转载
2023-09-19 08:59:00
198阅读
简介LNAsyncKit是一个异步渲染工具,它提供了便捷的方法帮助你将多个元素(Element)异步渲染到一张图片上,让这个过程代替UIKit的视图构建过程,进而优化App性能;Prender提供预加载策略帮助你在Feed流中弥补异步渲染带来的延时;除构建视图外,Transaction提供更优雅的方式让主线程与子线程交互,并能根据机器状态控制并发数和主线程回调时机。LNAsyncKit借(ji)鉴
转载
2023-08-08 19:58:44
67阅读
前段时间曝光的存在于iOS设备上的BootROM漏洞checkm8,即开源越狱工具ipwndfu,通过该工具可以在存在漏洞的设备上面读取苹果的SecureROM。 而BootROM漏洞存在于硬件之上,无法通过软件来修复,且该漏洞存在于从A5开始到A11的所有Apple A系列处理器之上,因此影响了从iPhone 4S开始到iPhone 8、iPhone X的所有iPhone,还有其他使用
1、进程什么是进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内比如同时打开迅雷、Xcode,系统就会分别启动2个进程2、线程什么是线程1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)一个进程(程序)的所有任务都在线程中执行比如使用酷狗播放音乐、使用迅雷下载电影,都需要在线程中执行3、线程的串行1个线程中任务的执行是串行的如果
转载
2023-08-19 07:45:54
62阅读
Build Settings编译选项将build setting中的 Optimization Level 设置为 Fastest, Smallest [-Os] ; 将build setting 中的 Strip Debug Symbols During Copy 设置为 YES (COPY_PHASE_STRIP = YES),这样可以减小编译出二进制文件的尺寸。这里提到的这些设置在Xcod
转载
2023-08-30 15:47:02
85阅读
记录一些mac下的常用命令:1、查看进程号ps -ef | grep 进程名2、查看端口被哪个进程监听sudo lsof -i :端口3、查看进程监听的端口sudo lsof -nP -p 进程号 | grep LISTENsudo lsof -nP | grep LISTEN | grep 进程号4、查看监听端口的进程sudo lsof -nP | grep LISTEN | grep 端口号5
转载
2023-05-31 00:02:42
0阅读
废话不说,直接上干货!一、APP启动过程1.解析Info.plist加载相关信息,例如如闪屏沙箱建立、权限检查2.Mach-O加载如果是胖二进制文件,寻找合适当前CPU类别的部分加载所有依赖的Mach-O文件(递归调用Mach-O加载的方法)定位内部、外部指针引用,例如字符串、函数等执行声明为__attribute__((constructor))的C函数加载类扩展(Category)中的方法C+
转载
2023-09-21 09:39:25
52阅读
获取info.plist文件获取ipa的安装包,可以通过iTools导出手机中已安装App的ipa包。导出ipa包后将后缀“.ipa”改成“.zip”并解压。在解压的文件找到info.plist文件。打开info.plist文件windows下需要安装一个plist文件编辑器: plist edit下载地址:http://download.cnet.com/Plist-Editor/3000-21
转载
2023-07-12 22:55:22
0阅读
一.进程和线程1.什么是进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内比如:同时打开QQ,Xcode,系统就会分别启动2个进程通过”活动监视器”可以查看Mac系统中所开启的进程2.什么是线程1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行比如使用网易云音乐播
转载
2023-10-29 19:06:07
82阅读
上篇文章讲述了iOS内存管理的基本概念,这里是一些内存优化的小技巧Strong Weak Dance这个大家都知道,就是处理循环引用,合理使用weak和unowned。降低内存峰值Lazy Allocation 延时加载是很常用的一种优化方法,如果有些情况我们不会立即使用某一对象和某些资源,我们完全可以在使用的时候再进行加载,这些就可以避免初次运行程序的时候内存消耗严重。lazy var goo
转载
2023-09-20 07:37:36
66阅读
2.3 内存管理iOS应用开发我不是吓唬你们。在iOS 5.0系统之前,内存管理毫无疑问是iOS开发最困难的部分。简而言之,问题是这样的。无论何时你创建了一个变量,你就要在内存中给它分配一定的空间。对于局部变量来说,我们通常使用栈上的内存,这些内存是自动管理的,当函数返回时,函数中定义的任何局部变量都会从内存中自动删除。这听起来很棒,但是栈有两个严重的局限。首先,它的空间非常有限,如果用尽了内存,
iOS 进程、线程、多线程、多进程… 的认识基于对进程、线程的记忆模糊,为了提高自己的认知,查找了许多许多资料,做了一次汇总。PS: 感谢广大网友。一、进程进程是一个具有独立功能的程序关于某次数据集合的一次运行活动,他是操作系统分配资源的基本单位。进程是指系统正在运行中的一个应用程序,就是一段程序执行的过程。我们可以理解为手机上的一个app。每个进程之间是独立的,每个进程均运行在起专用且受保护的内
转载
2023-07-13 15:54:36
160阅读
死锁:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。安全状态与不安全状态:安全状态指系统能按某个进程顺序来为每个进程分配其所需资源,直至最大需求,使每个进程都可以顺利完成。若系统不存在这样一个系列,则称系统处于不安全状态。 产生死锁的原因:1、竞争系统资源。2、进程的推进顺序不当。产生死锁的必要条件:1、互斥条件:进程要求对所分配的资源进行排它性
转载
2023-06-14 21:07:52
131阅读
该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动!上一节介绍了消息传递和消息转发,接下来我们看看内存管理相关的内容; 第4章 内存管理 恰当的内存管理是正确而高效地开发程序的关键; 本章详细介绍为OC程序分配和释放内存的途