iOS Masonry对包体积的影响

devtools/2024/12/28 22:10:18/

01

Masonry介绍

Masonry是iOS在控件布局中经常使用的一个轻量级框架,Masonry让NSLayoutConstraint使用起来更为简洁。Masonry简化了NSLayoutConstraint的使用方式,让我们可以以链式的方式为我们的控件指定约束。

常用接口声明与实现:

e8ef4fb00be2c3b6b7d82f8ea2bee9a4.png

使用方式:

fb62b94e846df4ec47bb1a57c70fdff3.png

02

对包体积的影响

可以看到Masonry的使用是以block为参数进行传递的,那如果项目中大量使用Masonry布局,那就会存在大量block,大家应该知道block实际上就是一个结构体,那这样就会增加代码量进而增加包体积,我们编写Demo进行测试:

4748bc5409e20cc4e356e009eb389db7.jpeg

26d3cedc02cbb01a82ab80b9bd573c70.jpeg

44580d7cf73419ffb275a6af6a3d8b14.jpeg

52197a1094bf4b29180ac2d1a4c76bb0.jpeg

1b8d8606d6be3e402ec52a02aee18b16.jpeg

Frame方式,将layoutWithFrame注释打开,编译运行,查看二进制文件大小,可以看到二进制文件大小为100K:

80743a8cbfac3a7ad9ab17a299ab3bfd.png

Masonry方式,将layoutWithMasonry注释打开,编译运行,查看二进制文件大小,二进制文件大小为103K: 7dad6c5eadf17836671eb1e9d5a2f8a0.jpeg

可以看到二进制文件增加了3K,如果整个工程都用这Masonry这种方式的话那应该会增加几M,包体积就会增加几M。

03

改进方案

那如果还是想用Masonry进行布局,但是用不想使用block怎么办呢?修改Masonry的源码,如下:

8bd95845a56e7e502a295ddb219d9a7f.jpeg

使用方法:

6311678cd6da111a8fe3063e487adc57.png

经过测试这种方式和Masonry原始的使用方式相比,包体积增加不明显。还是用上面的Demo进行测试,将Masonry布局方式改为下面Demo,然后编译运行。

7c1dbfa247ee4c116d000c5f5aa29355.jpeg

4263f09b94565f34a2aa0ada9ffa5984.jpeg

a90e53efb376578396c86826cf65b21a.jpeg

编译运行,查看二进制文件大小,二进制文件大小为101K:

f78f43647670e0e269eb2a0e1965b156.jpeg


http://www.ppmy.cn/devtools/146213.html

相关文章

JVM执行引擎JIT深度剖析

前端编译与后端编译 Java 程序的编译过程是分两个部分的。一个部分是从java文件编译成为class文件,这一部分也称为前端编译。另一个部分则是这些class文件,需要进入到 JVM 虚拟机,将这些字节码指令编译成操作系统识别的具体机器指令。这一部…

中学数学:一个函数值计算题

在数学的领域中,函数是一种描述变量之间关系的桥梁,它能够揭示出看似复杂现象背后的简洁规律。通过函数,我们可以预测、分析并解决实际问题。在这张图片中,我们看到了一位数学爱好者手写的解题过程,它展示了如何巧妙地…

upload-labs关卡记录11

先上传一个一句话木马试试,居然可以上传成功,复制图片链接,在另一个窗口打开: 会发现,我们明明上传的是shell.php,但是这里就是没有了php,这样我们在执行我们相关的语句的时候就无法执行了: 就…

node.js和js

JavaScript 核心语法 (ECMAScript) 变量和作用域:var、let、const声明,作用域链。数据类型和结构:基本数据类型(Undefined、Null、Boolean、Number、BigInt、String、Symbol),复合数据类型(对象…

【scau计算机网络】期末综合实验——思科模拟

实验一: 实现所有 PC、交换机和路由器的全 PING 通 (划分网络,配置单臂路由,配置OSPF) 实验设备 4台路由器(Router-PT) 5台交换机(Switch-PT) 4台主机 主机初始配置…

RGB TO YCBCR

YCBCR基本原理: 部分传感器自己定义: 重点RGB转换YCBCR公式: 代码分几个模块分析: 1.RGB565 to RGB 888,但会造成饱和度稍微强一些,用损失图像精度来换取资源消耗 assign rgb888_r {img_red , …

【Linux】Centos7下载npm

Index of /dist/v16.20.2/ (nodejs.org) 下载 wget https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.gz解压 sudo tar -zxvf node-v16.20.2-linux-x64.tar.gz 配置环境变量 sudo vim /etc/profile export NODE_HOME/usr/local/node-v16.20.2-linux-x64 ex…

服务器反应慢,秒杀设计

目录 服务器反应慢 线上服务器cup飙升,如果定位Java代码? 服务器变慢如何诊断处理? 线上接口负载剧增,快扛不住了,解决方法是什么? 秒杀设计 从全局角度如何设计一个秒杀系统 秒杀活动里遇到的问题 …