本期概要
- 本期话题:App Accelerator 共享会 & 什么是精准测验
- 本周学习:iOS Memory 内存概念
- 内容引荐:Swift 内容引荐 & Github 有用技巧
- 摸一下鱼:两款动态图片生成器,iOS 16 Beta 6 和 iPhone 14 发布日期承认,体系规划课程以及 Go 言语教程,IAP 服务端告诉状况码变化流程。
本期话题
收拾修改:zhangferry
App Accelerator
近期有两场 Apple 加速器共享:
- 规划杰出的桌面级 iPad App,8 月 22 号。iPadOS 16 有一项重要更新便是对桌面级应用的支撑,这样改动会为 iPad 生态带来哪些改变还不确认。假如对这方面内容感兴趣能够报名这场共享,该次共享会经过 Apple 在搜索、导航栏、修改菜单、多选等功用傍边的一系列改善,来介绍如安在 iPad 上规划出桌面级的 App。
- 了解和消除 App 的卡顿,8 月 25 号。本次共享会讲解经过 Xcode 14 供给的新才能发现卡顿及其相关原因的工具和方法,以及 App 卡顿的一些反面典型,学习防止这些卡顿的最佳实践。
什么是精准测验
在讲精准测验之前先来了解下传统的测验流程,传统测验流程会有黑盒测验、白盒测验,白盒测验会更精准一些,因为它是根据已知逻辑编写的测验用例。但白盒测验有个问题是它没有代码概念,每次回归都需求跑全量用例,随着项目越来越大,测验用例可能会多达上万条。要知道每个版别的修改相对代码总量来说都是比较小的,假如每次都跑全量用例显然是一种浪费,那有没有办法再精准一些,触及改动的部分才跑对应的用例?有的,这便是精准测验要解决的问题。
精准测验的核心技术便是把用例和代码相关起来,相关的方法是插桩,给每一个履行句子(Basic Block,BB 是一种更细粒度的代码块,它能表明每一个条件句子的分支)插上桩,当该句子被履行时创立一个符号记载其履行次数。一个用例履行完的时分,导出插桩内容并解析,咱们就能够记载该用例履行的「代码覆盖率」。覆盖率数据能够用来测量当时用例测验的充分程度,但随着工程的演进「增量代码覆盖率」更具含义,咱们能够运用这个增量目标衡量 MR/版别维度的测验程度。
再回到精准测验,当咱们拿到覆盖率数据时其实也就拿到了代码与用于之间的映射联系,把这部分数据落入数据库中,根据 MR/版别改变产生的代码 Diff 就能够推测出相关用例了,而这部分用例便是咱们需求的「精准的测验用例」。理论不复杂,可是施行起来却不容易,精准测验对应的是一整个体系,这里再引荐两篇精准测验相关的文章:深入理解 Swift 代码覆盖率,走出回归测验窘境,爱奇艺精准测验体系建造。
本周学习
收拾修改:JY
iOS Memory 内存
iOS 是根据 BSD
开展而来,所以理解一般的桌面操作体系的内存机制是十分有必要的,这期咱们就来收拾一下,内存的根底八股。
沟通空间
手机的物理内存比较小,假如遇到不够用的状况怎么办?, 像一些桌面操作体系,会有内存沟通空间,在 window
上称为虚拟内存。它的机制是,在需求时能将物理内存中的一部分沟通到硬盘上去,运用硬盘空间扩展内存空间。可是 iOS
并不支撑沟通空间,大多数的移动设备都不支撑沟通空间,移动设备的存储器一般都是闪存,它的读写速度远远小于电脑所运用的硬盘,这就导致在移动设备上就算运用了沟通空间,其功用也是十分低效的。移动设备的容量本身就经常缺少、内存的读写寿数也有限,所以不适合内存沟通的计划。
Compressed Memory
因为闪存容量和读写寿数的限制,iOS 上没有沟通空间机制,取而代之运用 Compressed memory
内存紧缩
Compressed memory
是在内存紧张时能够将最近运用过的内存占用紧缩至原有巨细的一半以下,并且能够在需求时解压复用。它在节省内存的同时提高了体系的响应速度,减少了不活泼内存占用,经过紧缩减少磁盘IO带来的功用损耗,并且支撑多核操作,例如,假定现在已经运用了4页内存,当不访问的时分可能会被紧缩为1页,再次运用到时分又会解压成4页。
内存分页
虚拟内存和物理内存建立了映射的联系。为了方便映射和办理,虚拟内存和物理内存都被分割成相同巨细的单位,物理内存的最小单位被称为帧(Frame),而虚拟内存的最小单位被称为页(Page)。
内存分页最大的含义在于,支撑了物理内存的离散运用。因为存在映射进程,所以虚拟内存对应的物理内存能够任意寄存,这样就方便了操作体系对物理内存的办理,也能够能够最大化运用物理内存。同时,也能够选用一些页面调度算法,来提高翻译的功率。
Page out 与 Page In
当内存不足的时分,体系会依照必定战略来腾出更多空间供运用,比较常见的做法是将一部分低优先级的数据挪到磁盘上,这个操作称为 Page Out
。之后当再次访问到这块数据的时分,体系会担任将它从头搬回内存空间中,这个操作称为 Page In
Clean Memory
Clean Memory
是指那些能够用以 Page Out
的内存,只读的内存映射文件,或者是frameworks
,每个 frameworks
都有 _DATA_CONST
段,一般他们都是 Clean
的,但假如用 runtime
进行 swizzling
,那么他们就会变Dirty Memory
Dirty Memory
Dirty Memory
是指那些被App写入过数据的内存,包含一切堆区的对象、图像解码缓冲区。一切不属于 clean memory
的内存都是 dirty memory
。这部分内存并不能被体系从头创立,所以 dirty memory
会始终占有物理内存,直到物理内存不够用之后,体系便会开端清理。
内容引荐
本期介绍三个着重于报道 Swift 言语开展的电子报以及近期的几篇优异博文
1、Swift 周报 — 来自:Swift社区
@东坡肘子:因为英文版的 Swift 周报停更,由国内 Swift 爱好者保护的中文版 Swift 周报也停滞了一段时间。从八月开端,中文版 Swift 周报重装上阵,全部内容由周报修改组自行收拾。当时模块分为:新闻、提案、Swift 论坛、引荐博文等。
2、波报|Pofat 的 Swift 中文电子報 — 来自:Pofat
@东坡肘子:Pofat 是一个在苹果生态系打滚多年的 App 工程师,出于对 “工作的表层之下” 有更多了解的巴望,创办了波报,作为他用来探究的手法。当时的内容包含:Swift 和 LLVM 官方消息、Swift 和 LLVM 论坛新鲜事、Swift (或其它相关)的底层原理讨论等内容。
3、Swift Evolution Monthly — 来自:Cihat Gndz
@东坡肘子:由 Cihat Gndz 于数月前创立的月报,专注于介绍进展中的 Swift 提案。创立该刊物很大的原因也是因为 Swift Weekly Brief 的停刊。
4、iOS 中的手势传递(一)操作体系层 — 来自:RickeyBoy
@东坡肘子:一般咱们处理手势是在 UIView 层级,直接运用 UIButton、UIGestureRecognizer 等来捕获手势,而本文重点讲的是在此之前,手势辨认与传递的进程,在介绍整个进程的同时,也能对整个操作体系的工作方法有必定的了解。
5、在 SwiftUI 顶用 Text 实现图文混排 — 来自:东坡肘子
@东坡肘子:SwiftUI 供给了强大的布局才能,不过这些布局操作都是在视图之间进行的。当咱们想在 Text 中进行图文混排时,需求选用与视图布局不同的思路与操作方法。本文将首要介绍一些与 Text 有关的知识,并经过一个实际案例,为大家收拾出在 SwiftUI 顶用 Text 实现图文混排的思路。
6、Github 有用小技巧 — 来自:漩涡
@东坡肘子:漩涡从一个开源项目从业者的角度,介绍了一些他在工作中经常运用的 Github 有用小技巧。包含:引证 Github Issues/PR/Discussion、运用 Fix / Close 来相关一个 Issue、可折叠的区块、Draft / Ready for review、恳求 Review、引证回复等内容。
摸一下鱼
收拾修改:CoderStar
- 介绍两款动态图片生成器,可根据访问地址上携带的参数动态控制返回图片的巨细、格局等属性,适合Mock 数据等场景;
- placeholder
- dummyimage
-
iOS 16 Beta 6 发布: Beta 5 版别引进电量百分比,低电量会自动显现,Beta 6 改为根据装备显现。
-
iPhone 14 发布日期承认:根据 Bloomberg 的报道,Apple 已经确认了 iPhone 14 的发布时间:9 月 7 号。iPhone 14 Pro有一对针孔,用于前置摄像头和FaceID扫描器。介时还会有 Macs,低端和高端的 iPad,以及三款 Apple Watch。
-
karanpratapsingh – 体系规划课程:karan pratap singh 个人做的免费的体系规划课程,短小精悍,但触及根底设施、数据和存储等各类知识,对此感兴趣能够看看。
-
karanpratapsingh – 学习Go言语:同样来自 karan pratap singh,他自己也是 Go 言语开发者,该课程能够作为入门教程。
-
Apple 生态中内购,特别是订阅型内购是一项十分重要的获取收入的功用,随着 Apple 在订阅功用上的完善,其对应的状况也越来越多。以服务端告诉类型为例其组合状况以多大数十种,那怎么区别各个状况之间的切换流程呢,这有有一张图进行了很好的总结。
-
前几天群里看到一个笑话,共享出来(手动狗头):
关于咱们
iOS 摸鱼周报,首要共享开发进程中遇到的经验教训、优质的博客、高质量的学习材料、有用的开发工具等。周报仓库在这里:github.com/zhangferry/… ,假如你有好的的内容引荐能够经过 issue 的方法进行提交。别的也能够申请成为咱们的常驻修改,一起保护这份周报。另可重视大众号:iOS成长之路,后台点击进群沟通,联系咱们,获取更多内容。
往期引荐
iOS 摸鱼周报 #64 | 与 App Store 专家会面沟通
iOS 摸鱼周报 #63 | Apple 企业家培训营已敞开申请
iOS 摸鱼周报 #62 | Live Activity 上线 Beta 版
iOS 摸鱼周报 #61 | Developer 规划开发加速器