iOS Masonry对包体积的影响

ops/2024/12/28 18:24:22/

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/ops/145715.html

相关文章

时频转换 | Matlab暂态提取变换transient-extracting transform一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式 基本介绍 时频转换 | Matlab暂态提取变换transient-extracting transform一维数据转二维图像方法 程序设计 clear clc % close all load x.mat % 导入数据 x x(1:5120); % 本数据只选择5120个点进行分析 fs 6400 ; % 数据采样频…

STM32开发笔记123:使用STM32CubeProgrammer下载程序

文章目录 前言一、STM32CubeProgrammer二、一键下载电路三、STM32CubeProgrammer的使用1、配置2、连接3、擦除芯片4、下载程序(1)在STM32CubeIDE中编译出HEX文件(2)打开文件并下载(3)下载成功后,显示如下信息前言 本文介绍使用STM32CubeProgrammer下载程序到STM32微控制…

Day36汉明距离总和

两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 给你一个整数数组 nums,请你计算并返回 nums 中任意两个数之间 汉明距离的总和 。 按照之前求海明码的做法做,暴力解超时。 class Solution {public int totalHammingDistance(int[]…

pcl源码分析之Harris关键点(二)

文章目录 前言一、responseHarris响应函数二、其他响应函数1.responseNoble函数2.responseLowe函数3.responseCurvature函数4.responseTomasi函数 三.refineCorners函数总结 前言 前文已经总结了一下pcl源码提取Harris关键点的流程和大致原理,这篇文章对关键函数进…

STM32-- keil -常用功能

1.修改整个工程名称(keil-c51编辑器) 要同时修改这三个文件,不然要重新设置。 uvoptx文件 uvoptx文件记录了工程的配置选项,如下载器的类型、变量跟踪配置、断点位置以及当前已打开的文件等等; uvguix文件 uvguix文…

mysql-二进制安装方式

目录 1. 安装组件即依赖包 2. 创建用户 3. 关闭防火墙 4. 解压mysql二进制源码包 5. 创建文件夹并赋予权限 6. 编译安装mysql,安装完成最后面,会有一串英文,那是登录数据库的密码 7. 设置配置文件 8. 将mysql添加进环境变量 9. 复制…

SpringBoot(Ⅱ)——@SpringBootApplication注解+自动装配原理+约定大于配置

1. SpringBootApplication注解 SpringBootApplication标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就通过运行这个类的main方法来启动SpringBoot应用; 并且Configuration注解中也有Component注解,所以这个主启动类/主配置类…

EleutherAI/pythia-70m

EleutherAI/pythia-70m” 是由 EleutherAI 开发的一个小型开源语言模型,它是 Pythia Scaling Suite 系列中参数量最小的模型,拥有大约 7000 万个参数。这个模型主要旨在促进对语言模型可解释性的研究; Pythia Scaling Suite是为促进可解释性…