本期概要
- 话题:Chrom 100 发布,关于阅读器类的 App 审核指南有所更新
- 面试模块:Runtime 中的 StripeMap 模板类
- 优秀博客:Swift 5.6 和 Xcode 13.3 的新特性和新功能
- 学习资料:即时设计是一款可以在线实时协作的专业 UI 设计工具
- 开发工具:Decode,将
Xcode Interface Builder
文件(Xib
和Storyboard
文件)转换为Swift
源代码。
资讯
Google Chrome 发布到版本号 100
新版本更新不算大,将继续大幅减少内存、CPU占用率,速度会更快。本次更新应用图标也进行了更换,红黄绿相交边缘的阴影变得更小了。从图标的发展来看,Google 的设计风格越来越扁平化。
「阅读器」App 分发的更新
去年,Apple 宣布 了 2022 年初在 App Store 上将进行的更新,该更新将允许「阅读器」App 的开发者在 App 中提供一个指向其网站的链接,以便用户创建或管理帐户。从今天开始,《App Store 审核指南》中的准则 3.1.3(a) 将会更新,阐明阅读器 App 的开发者现在可以申请外部链接的帐户授权。
面试解析
整理编辑:Hello World
StripeMap<T>
模板类
StripeMap<T>
是 OC Runtime
中定义的一个类,用于引用计数表、Synchroinzed
、以及属性设置时的 lock
列表等。该类可以理解成是一种特殊的 hashmap。
特殊性体现在:一般的 hashmap key&value 是一一对应的,即使存在哈希冲突,也会通过其他方法解决该冲突,但是StripeMap
是 key&value 多对一的。
我们去思考下 apple 为什么要将内存管理的表结构设计为 StripeMap
类型?先了解下简化后定义:
```cpp enum { CacheLineSize = 64 };
template class StripedMap {
if TARGETOSIPHONE && !TARGETOSSIMULATOR
enum { StripeCount = 8 };
else
enum { StripeCount = 64 };
endif
struct PaddedT {
T value alignas(CacheLineSize); // 对齐
};
PaddedT array[StripeCount];
}; ```
StripeMap
存在的意义就是优化高频访问 <T>
产生的性能瓶颈,尤其是在多线程资源竞争场景下。根据注释主要体现在以下方面
- 对象结构内部维护一个数组,根据设备的不同分成不同的页,移动设备是 8 页&#