湖州网站建设服务wordpress高亮代码大前端

news/2025/10/1 2:14:44/文章来源:
湖州网站建设服务,wordpress高亮代码大前端,成都百度推广公司电话,陕西建设工程合同备案网站今天博客的内容就系统的讨论一下Masonry对FSP的影响#xff0c;以及如何更好的使用Masonry。如果你对iOS开发足够熟悉的话#xff0c;那么对Masonry框架应该不陌生。简单的说#xff0c;Masonry的诞生让AutoLayout的使用更为优雅#xff0c;让控件的布局更为方便。使用辩证… 今天博客的内容就系统的讨论一下Masonry对FSP的影响以及如何更好的使用Masonry。如果你对iOS开发足够熟悉的话那么对Masonry框架应该不陌生。简单的说Masonry的诞生让AutoLayout的使用更为优雅让控件的布局更为方便。使用辩证的观点来看一个事物的话凡事都有两面性Masonry的使用也不例外。Masonry框架的使用不当会直接影响当UI的FPS。今天我们就来讨论一下在使用Masonry时的一些误区看一下那些影响性能的使用方式。本篇博客我们依然会依托于Demo来叙述的一些东西。 之前写过一篇文章是专门来介绍Masonry框架的并且对该框架的源码进行了相关解析详细内容请移步于《iOS开发之Masonry框架源码解析》。 一、Demo综述 1.运行效果 先入为主本篇博客的内容依然是依托于我们特意为本篇博客所打造的Demo的首先我们先来看一下Demo运行起来是怎样的效果通过Demo我们可以看到那些问题以及这些问题是如何被解决的。下方就是我们本篇博客所涉及Demo的运行效果。  从下方的运行效果不难看出我们是分了6种情况来观察和判断Masonry的各种使用方式对FPS的影响如何。上方通过六个SegmentControl可以去切换Cell的布局方式。当然每种布局方式所呈现出来的Cell是相同的。这样也是做实验时保持实验项改变其他项保持一致的原则。我们可以通过右下方FPS指示器来直观的感受一下FPS的变化趋势。下方这个FPS显示控件是从我们之前的Demo中拿过来的。之前的Demo也是关于FPS优化的只不过是关于Cell高度动态计算的FPS优化详情请移步于《iOS开发之多种Cell高度自适应实现方案的UI流畅度分析》。 下方Cell中所显示的数据时随机生成的左边的Image也是随机取的。右边的Title和Detail都是NSAttributedString并且下方的有些Detail有可能为空。如果某一条的Detail为空那么该条Detail下方的所有内容的布局上移。稍后会详细的介绍该Demo以及其中的技术点。 2、模拟网络请求 上面Cell中显示的数据是通过模拟网络数据来获取的下方就是我们的模拟网络层的相关代码。毕竟是Demo并且Demo的重点不在网络层上下方就简单的写了一下代码比较简单。就是一个单例一个模拟数据随机生成的方法然后把这个随机生成的数据通过Block回调到网络层的使用者上。具体代码如下所示 3、上述Cell的基类XBaseTableViewCell 上面每种Segment中的Cell都是一种独立的Cell类型不过这些Cell有一个共同的父类。而这个父类就负责来处理这些Cell所共用的逻辑。下方的这个XBaseTableViewCell就是上述显示的所有Cell的基类。其中声明并初始化了Cell上的所有控件。并且提供了相关的设置值的方法。 从下方的代码中不难看出有两个方法是需要子类进行重写的一个是给控件添加布局的方法addLayoutSubviews, 另一个就是更新布局的方法updateLayoutSubviews方法。每个子类中都会对这两个方法进行重写并给出不同的布局方式。 4、Segment中切换Cell的代码     下方是在相应的VC中的点击SegmentControl的逻辑代码, 点击不同的Segment会选择不同的Cell然后刷新TableView代码比较简单就不做过多的赘述了。 二、对上述各种的布局方式进行分析 接下来要做的事情就是分析一下每种布局方式对FSP的影响下方会对不同的布局情况使用Instrument进行分析并看一下具体的数据。下方分别讨论了只使用Masonry的Update操作、Remake操作、先Make后Update、Frame操作以及先Make后Frame操作。 1、update 首先我们来看一下update操作。也就是使用update直接给控件赋值这是比较偷懒的一种操作。因为在我们的Demo中在设置cell的值时会更新一些控件的UI布局所有我们索性就直接使用Masonry的update直接给控件添加约束。在Masonry中的update操作有个特点就是update一个约束会先在已添加的约束数组中找到该约束然后更新该约束如果找不到就install添加相应的约束。从这个update的功能来看其效率是比较低的。 我可以先看一下代码实现在子类XUpdateLayoutTableViewCell中重写了addLayoutSubviews和updateLayoutSubviews两个方法。在updateLayoutSubviews方法中为所有的控件使用update的方式添加约束。下方这样写会在每次设置值的时候都会调用下方的updateLayoutSubviews方法这样就会更新cell上的控件的所有布局当然不建议这样去做因为这样会更新那些不需要更新的约束。之所以今天罗列出来是因为在开发中下方的问题确实存在也许是因为时间紧张也许是因为其他原因导致的下方这种代码实现。 我们先来使用Instruments跑一下上述的Demo然后直观的感受一下该Demo的Core Animation的直观表现。下方就是我们将SegmentControl切换到Update时所对应的FPS数据。从下方的数据我们不难看出直接用Update添加更新约束这种做法是比较影响FPS的。当然Cell中还会使用到属性字符串这个我们稍后会讨论一下的。 我们可以来跑一下Update状态下的Time Profile。如下所示从下方的结果中不难看出在Cell更新数据时有两块的操作比较耗时。一个是Masonry的update操作另一个则是Label设置NSAttributedString的操作。因为我们使用的每个Label都会赋值一个属性字符串这个是比较耗时的操作。还有一个要明确一点的是属性字符串的创建和生成并不会占用多少时间而属性字符串的赋值和渲染所占用的时间是比较多的这一点从下方的Time Profile中也是不难看出的。 2、remake 接下来我们在来看一下Remake操作从下方的Core Animation的结果中不难看出其所表现出来的效果还不如使用Update操作呢。下方的FPS比Update要低一些这也与remake自身的操作有关系remake从字面意思来看就是重新制作如果之前已经添加过约束的话就先移除掉然后再添加新的约束。 下方是Remake所对应的Time Profile从结果中我们可以看出布局更新占用了66.6%的耗时而且33%的install耗时中uninstall占用了10%左右的开销。在Masonry中remake效率是最低的。稍后我们会继续进行讨论。 3、make update 讨论完update和remake, 我们来讨论一下使用Masonry的常规做法。就是使用make来初始化控件的布局使用update来更新所需要更新的约束。因为代码比较简单就不一一往上贴了但是跑一下使用Instrument跑一下还是很有必要的。下方是make update 的方式的Core Animation所跑出来的结果。但从下方的FSP结果来看还是要比之前只使用update或者remake的效果要好一些的不过下方的FPS还是不高稍后我们会将下方的数据进行细化。 该部分的Time Profile就不跑了因为设置值的时候我们依然采用的Update来更新的约束只不过不是更新所有的约束而是更新那些只需要更新的约束。因为更新的约束的量会少一些所有FPS的表现效果会比之前更新所有的约束会更好一些。make update的方式会是FPS稍微改善一些但是从下方的图中我们可以看出改善的并不是特别好。 4、frame frame 接下来我们就不用Masonry来布局了我们直接使用Frame布局。因为Autolayout最终仍然会转换为Frame布局的很显然Frame布局在性能方面是优于Autolayout布局的。接下来我们就来使用Frame布局然后使用Frame更新。下方的FPS还算说得过去不过还不是满格其大部分原因就是因为NSAttrubitedString的原因了。 我们可以看一下更新Frame的Time Profile如下所示。从下方的截图中我们不难看出update frame的时间占比只占到了2.5%之前更新约束能占到60%左右可以看到使用Frame布局的好处。从下方的分析结果中不难看出现在影响FPS主要因素已经从更新布局转化到了AttributeString的设置。这也是上述FPS没有满格的原因。 6、make frame Masonry的诞生就是为了方便控件布局的Frame布局不够灵活适配起来比较繁琐所以才有了AutoLayout。不过虽然AutoLayout可以很方便的适配屏幕可是其性能方面表现的不是特别好。那么我们可不可以将两者进行结合呢。也就是说使用make来初始化控件的布局使用Frame来更新布局。当然这一过程不是简单的在设置值的时候更新一下Frame就可以的因为在Cell设置值的时候去更新Frame是没用的因为更新完Frame后在渲染显示的时候还是会按照AutoLayout的布局来显示的。我们需要做的是将Frame布局放到Autolayout布局之后此处我们要做的就是将更新Frame的相关代码放到下一个Runloop中来执行。更新Frame代码如下 在cell中是make初始化控件布局使用Frame更新布局和FrameFrame的方式差不多只不过是使用Masonry布局时在首屏加载的时候不如Frame布局以后更新是一样的。下方是使用MasonryFrame的形式的Core Animation的结果。效果虽然比上一部分会稍微差一些但是最终的效果还是满Ok的。  三、总结 本篇博客只讨论Masonry的布局方式对FPS的影响至于上述的NSAttributeString的问题不做过多赘述了。如果根据业务需要有许多富文本的展示影响了FPS的话那么可以采用其他的方式来进行优化比如使用AsynDisplayKit所提供的相关Node进行显示等等。在博客的结尾还是有必要做一个总结的。 下方是我们在代码中更为细化的数据从数据中不难看出Remake的性能是最差的所以我们在使用Masonry时尽量要少使用Remake。对控件的更新只一味的选择使用Update也不是一个好的选择如果要使用Masonry框架还要对控件进行布局更新的话最好是把那些不变的约束和需要更新的约束分开。使用make来添加相关约束使用update来修改需要更新的约束。当然使用Frame布局的性能会好一些不过布局过程过于繁琐不便于进行屏幕的适配。当然也可以使用Masonry进行布局使用Frame进行布局的更新当然需要注意的是Frame布局更新的时机需在Autolayout加载的时机后进行。 下方是进行了统一的数据统计当然是针对本篇博客所对应的Demo的。下方表格中统计了一次更新cell布局所采用的不同方式的平均时间从下方的数据中我们不难看粗Remake的更新布局用时最多消耗了12ms, 而Update所有的约束用时也是不少一次更新布局使用了9ms。而只更新需要更新的布局用时7ms, 稍微要比更新所有的布局要好一些。当然直接修改Frame的用时最少只用了0.06ms的时间从该数据可以直观的感受到Frame布局的效率性。 而右边还给出了一个属性字符串的创建和赋值的用时其中我们可以看到属性字符串的创建耗时并不是太多而比较耗时的是属性字符串的赋值每次赋值占用了0.7ms, 如果是10个的话那么赋值时间就是7ms, 如果属性字符串的内容再复杂一些那么用时肯定会比这个高。当然我们可以使用第三方提供的一些控件和方法将这部分时间给优化掉这个可以放到以后再讨论。 今天的博客就到这儿吧目的是在使用Masonry时要合理的进行使用有必要时可以使用Frame进行布局。 上述demo -github分享链接https://github.com/lizelu/FPSProfileDemo     原文地址http://www.cocoachina.com/ios/20171116/21197.html   转载于:https://www.cnblogs.com/SUPER-F/p/8963850.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【半导体器件 | 笔记】pn结二极管

目录基本公式回顾能带模型载流子连续性方程(运输方程)电学方程电荷控制方程导入术语,记号与定性解静电特性内建电势\(V_{bi}\)耗尽近似外加偏压下的突变结I-V特性:理想二极管方程定性载流子分布理想I-V电荷控制方程…

2019河北省建设厅检测员报名网站网络系统脆弱性的不安全因素

Android图形显示系统 Android图形显示系统是Android比较重要的一个子系统,和很多其他子系统的关联紧密。 Android图形系统比较复杂,这里我们从整体上理一遍,细节留待后期再去深入。Android图形系统主要包括以下几个方面: - 渲染…

自己做网站创业wordpress木马乐主题

1 /*2 Dijkstra算法用优先队列来实现,实现了每一条边最多遍历一次。 要知道,我们从队列头部找到的都是到3 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其他点(被更新的节点可以在队列中4 ,也可以是…

251001

251001这是一个真理不存在的世界,所有人都相信一个不存在的东西,矛盾缠绕扭曲着活在当下的每个人,一层一层又一层,洋葱的最后一层也是洋葱。镜子的碎片藏在路人的鞋底,我不是喜欢鞋子,我是想要镜子,慢慢扣出来再…

Day2:Linux文件目录移到拷贝与vim编辑器使用指南

​ 一、文件与目录管理命令 1. ls —— 列出目录内容 功能:显示文件和目录的名称、大小、权限等信息。 语法:ls [选项] [文件/目录] 选项说明-l长格式显示(详细信息)-a显示所有文件(包括隐藏文件)-h人性化显示文…

专业做全景图的网站平台重要的网站建设

点击蓝字关注我们作者丨土豆知乎来源丨https://zhuanlan.zhihu.com/p/158857128本文已获授权,不得二次转载前言在深度学习中,我们总是不可避免会碰到各种各样的损失函数。通常来说,损失函数都是高维的函数,难以可视化为人类可以分…

关于宠物的网站网页设计国家认可的赚钱游戏

闲来无聊,话说saltstack webui halite还一直没玩,于是就凑今天体验一把;很多尝鲜的同学都说halite的功能较少,而其也正符合其说明console,不过其UI我还是蛮喜欢的,个人觉得比较清新简洁、挺好下面就来安装体…

【半导体物理 | 笔记】第八章 半导体表面与MIS结构

表面态晶体自由表面使其周期场在表面处发生中断,引起附加能级表面态:电子的分布概率主要集中在x=0处,即电子被局限在表面附近表面电场效应 理想条件:金属板与半导体间功函数差为零;在绝缘层内没有任何电荷且绝缘层…

seo网站建设接单wordpress 自定义模版

Golang(又称Go)是一种快速、可靠且高效的编程语言,由Google开发并在开源社区广泛应用。Golang的设计目标是通过简洁的语法和强大的并发模型提供高效的开发体验。在本文中,我们将指导您如何安装和配置Golang,以便开始您…

【半导体物理 | 笔记】第七章 金属和半导体的接触

金半接触及其能级图 功函数 金属功函数$$W_m=E_0-E_{Fm}$$ 一个起始能量为费米能级的电子由金属内部逸出到真空所需的最小能量 半导体功函数$$W_s=E_0-E_{Fs}$$ 电子亲合能$$\chi=E_0-E_c$$ 接触电势差$$V_{ms}$$ 内建…

现在个人网站怎么备案女生做新媒体运营是不是很累

之前写过一篇文章 python使用uiautomator2操作雷电模拟器_uiautomator2 雷电模拟器-CSDN博客 上面这篇文章用的是雷电模拟器4,雷电模拟器4.0.78,android版本7.1.2。 今天有空,再使用雷电模拟器9,android版本9来测试一下 uiauto…

自助建个人网站哪个好安卓wordpress客户端

不知道大家有没有看过吴京题为<<一切不怕从零开始>>的演讲。我曾经刷微博的时候看到过,印象和触动最深的是他的那句"我走过很多的路,换过很多的方向,不敢说有什么成就,到今天我觉得唯一能够让我拿出来炫耀的可能就是,我不害怕从头开始"。这样的话,对年龄…

【半导体物理 | 笔记】第四章 半导体的导电性

一、载流子的漂移运动和迁移率 欧姆定律 电导率 \(\sigma =\dfrac{1}{\rho}\) 欧姆定律微分形式 \(J=\sigma \mathscr{E}\) 漂移速度和迁移率 迁移率 \(\mu=\left|\dfrac{\bar{v}_\mathrm d}{\mathscr E}\right|\) \(J…

【半导体物理 | 笔记】第五章 非平衡载流子

一、非平衡载流子的注入与复合 非平衡载流子:比平衡状态多出来的部分载流子,通常指非平衡少数载流子 \(\Delta n=\Delta p\) 附加电导率 \(\Delta \sigma=\Delta pq(\mu_\mathrm n+\mu_\mathrm p)\) 产生率:单位时间…

seo网站外包公司王烨是哪个小说的主角

Android Studio中使用命令行gradle查看签名信息&#xff1a; 使用 Gradle 插件生成签名报告 打开 Android Studio 的 Terminal。 运行以下命令&#xff1a;./gradlew signingReport 将生成一个签名报告&#xff0c;其中包含 MD5、SHA1 和 SHA-256 的信息。 如果失败&#xf…

【AHK】暗黑3助手,加强版鼠标宏

暗黑3助手主要功能:键盘按键连点、鼠标连点、血岩赌博助手、铁匠分解助手、魔盒重铸助手、魔盒升级助手、工匠附魔助手、冲层赌图助手等等...... 下载地址( 密码 gseg ):https://wwpc.lanzoub.com/b0138y3upg功能…

综合信息网站模板重庆网站建设seo优化

迭代器 能力&#xff1a;行进和存取的能力Input迭代器 一次一个向前读取元素&#xff0c;按此顺序一个一个返回元素例子&#xff1a;从标准输入装置(键盘) 读取数据&#xff0c;同一个数据不会被读取两次&#xff0c;流水一样&#xff0c;指向的是逻辑位置使用前置式递增运算…

家教网站开发太原制作网站的公司

作者 | Lakmal Warusawithana译者 |弯月 责编 | 徐威龙封图| CSDN 下载于视觉中国早些时候&#xff0c;开发人员只需编写程序、构建&#xff0c;然后运行。如今&#xff0c;开发人员还需要考虑各种运行方式&#xff0c;作为可执行文件在机器上运行&#xff08;很有可能是虚拟机…

地产网站开发公司百度推广渠道

1. 创建项目 2. 创建空项目 3. 输入项目名 &#xff14;.配置JDK 点击Project Structure 配置JDK 点击Apply->OK 5. 新建模块 https://www.bilibili.com/video/BV12J41137hu?p21&spm_id_frompageDriver

自动做简历的网站杭州装饰装潢公司10大品牌

索引 索引是一种单独的物理层面的数据结构&#xff0c;其作用是用于加速查询 mysql把数据存储到硬盘中&#xff0c;硬盘读写速度非常慢 一个应用程序&#xff0c;本质上就是对数据进行增删改查 一旦数据量比较大时&#xff0c;硬盘的响应速度变慢&#xff0c;给用户的感觉应用程…