本期概要

  • 论题:苹果多个产品线的更新介绍
  • 面试模块:动态库与静态库的差异
  • 优异博客:关于该不该换作业以及怎么准备面试
  • 见识:一个新的、偏技能范畴的博客引荐模块
  • 学习材料:Rust 数据结构与算法
  • 开发工具:Aria2GUI,一款支撑多种协议的轻量级命令行下载工具

本期论题

@zhangferry:苹果的多个产品线带来了一波更新。

macOS Monterey 12.3

  • Python 2 被从体系中移出了,但新体系中也并没有预装 Python 3,需求开发者手动安装。
  • Universal Control(通用控制):键盘、鼠标和触摸板能够在 Mac 和 iPad (iPadOS 15.4) 端无缝衔接。
  • M1 芯片的电脑能够调配支撑空间音频的 AirPods 运用头部追寻功用。

iOS 15.4

  • 支撑戴口罩的 FaceID 功用,仅支撑 iPhone 12 及之后的机型。
  • 新增了 37 个 Emoji 表情。

Xcode 13.3

  • 新增了一项针对 Swift 的编译优化
defaults write com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 1
  • Instruments 取得了多项提高,提高了 leaks 、memory graph debugger 扫描的准确性等。

问题收集:

  • 反响打包时有 pod 相关反常
  • 反响编译变慢

Swift 5.6 Released

  • 类型体系的提高。Type Placeholders SE-0315
  • 改进了指针交互的功用
  • SPM 增加了运转新插件的才能

还有一个小优化:SE-0290: Unavailability Condition

面试解析

收拾修正:JY

静态库和动态库的差异

静态库(Static Library)

特色如下:

  • 分发文件大

  • 静态库默许仅将有用到的类文件 linkMach-O 中 (以类文件为最小链接单位)

  • ipa 包小(为了 App 瘦身,尽量将代码放静态库中)

    • 静态库中某个方针文件的代码没有被任何地方引证,则这个方针文件不会被链接到可履行文件中去(分类代码常常被优化掉,一般都运用 -Objc-all_load 或许 -force_load 来处理静态库分类加载问题)
  • App 冷发动速度快

    • 条件是不运用 动态库拆分 调配 动态库懒加载方案
    • App 发动流程中有 rebasebind,多个静态库只需求 rebasebind 一次
  • 存在符号抵触或许

  • 同享 TEXT 段

    • iOS 9 以前单个 Mach-O 的 TEXT 约束 60M
    • iOS 9 今后单个 Mach-O 的 TEXT 约束 500M
  • 不需求额外签名验证

  • 静态库符号的可见性能够在链接期间被修正

  • 文件格局多为 fat 格局的静态库文件

  • 方法多为 .a.framework

  • 静态库不含 bitcode 时,引证静态库的方针布置时就不能包含 bitcode

动态库(Dynamic Library)

特色如下:

  • 分发文件小

  • ipa 包大(条件是不考虑懒加载的情况)

    • 动态库会把整个 lib 复制进 ipa
  • App 冷发动速度慢

    • App 发动流程中有 rebasebind,多个动态库只需求屡次 rebasebind
  • 需求设置适宜的 runpath

  • 需求动态加载

  • 需求签名且需求验证签名

    • 会查看 framework 的签名,签名中有必要包含 TeamIdentifier,而且 framework 和 host App 的 TeamIdentifier 有必要一致
    • Xcode 重签名,保证动态库签名一致性
  • 需求导出符号

  • 重复的 arch 结构

  • App 与动态库中重复代码能够共存,不会产生符号抵触

    • 因为可履行文件在构建链接阶段,遇到静态库则吸附进来,遇到动态库则打个标记,彼此坚持独立性。
    • 关于来自动态库的符号,编译器会打个标记,交给 dyld 去加载和链接符号,也便是把链接的进程推迟到了运转时履行。(比方 App 运用的是 3.0 版别 SDK,动态库运用的是 1.0 版别 SDK,能正常运转,可是会有危险)
  • 链接后需求包含分发大小

  • 冷发动进程中,默许会在 main 函数之前加载

    • 默许情况下,过多的动态库会拖慢冷发动速度
    • 假如选用懒加载动态库的方法,能够加速 App 的发动速度,能够运用 dlopenbundle 懒加载优化
  • 文件格局 Mach-O(一个没有 main 函数的可履行文件)

  • 动态库不包含 bitcode 时,引证动态库的方针布置时能够包含 bitcode

  • CocoaPodsv0.36.0 开端,可添加关键字 use_frameworks! 编译成类似 Embedded Framework 的结构(能够称之为 umbrella framework

    • 缺点:默许把项目的依靠悉数改为动态库(可运用 use_modular_headers!,也能够在 podsepc 添加 s.static_framework = true 规避)
    • CocoaPods 履行脚本把动态库嵌入到 .appFramework 目录下(相当于在 Embedded Binaries 参加动态库)

优异博客

收拾修正:皮拉夫大王在此

本期优异博客主题相对轻松,聊聊面试相关和生长相关的作业。本来想借助本期内容收拾下 rebase & bind 的相关技能细节,可是这周被某些自媒体分布的裁人消息给刷屏了,恰巧我自己也是在最近换了作业,因而借助这个机会和咱们一同暂停下技能学习的脚步,抬头看看外面的情况。

阅览后你将取得什么?

  • 假如你在犹疑自己是不是该换作业,那么能够从文章中找到部分答案;
  • 东野浪子和苍耳两位大佬是十分资深的大厂面试官,他们的主张是十分中肯的;
  • 我自己近期面试的一些细节;
  • 尽管不认同面试问陈腔滥调文,可是仍是给咱们准备了陈腔滥调调集,以供咱们增强面试信心;

1、假如你在犹疑期,请看下文

1.1 浅谈怎么理性的判断自己是否应该换作业 — 来大众号:东野职场派

@皮拉夫大王:上一年引荐过这篇文章,考虑到目前是金三银四,有些同学或许之前没有看过,因而再引荐一次。

2、面试官篇:知己知彼,面试官的关注点

2.1 给面试者的一些主张 — 来自:苍耳的技能博客

2.2 面试过500+位提名人之后,想谈谈面试官视角的一些期待 — 来大众号:东野职场派

@皮拉夫大王:以上两篇文章的观点实质上来说是一致的,面试官希望提名人是在平常作业中是有所考虑和行动的人,而不是临时抱佛脚去应试。因而用半年时刻去刷题温习基础知识,不如用这个时刻去仔细打磨一个项目

3、提名人篇:近期面试的一些细节

3.1 刚换作业,说点找作业相关的作业~ — 来自大众号:皮拉夫大王在此

@皮拉夫大王:这是我自己近期的亲身经历,前段时刻和几个朋友聊了聊换作业的作业。包含:该走该留?怎么准备?怎么写简历?怎么投简历?面试中和面试后各有哪些问题?等等

4、最全基础知识收拾

4.1 《史上最全iOS陈腔滥调文面试题》2022年 — 来自51CTO:宇夜iOS

@皮拉夫大王:面试中多多少少会调查到部分基础知识,对基础不放心的同学能够看看。

见识

收拾修正:zhangferry

这一周阅览或许观看到的有价值的消息。

1、深度学习撞墙了 — 来自:机器之心

@zhangferry:早在 2016 年,深度学习教父级人物 Hinton 就曾说过,咱们不必再培育放射科医师了。但现在 AI 并没有取代任何一位放射科医师,问题出在哪呢?在 Robust.AI 创始人 Gary Marcus 看来深度学习或许就要撞墙了。整个 AI 范畴需求寻觅新的出路。

深度学习实质上是一种识别模式,当咱们只需粗略结果时,它十分合适,可是关于需求精确性操作且危险很高的作业,像放射学和无人驾驶,就需求很慎重了。人工智能确实没有咱们幻想的进化那么快,所以它的未来是失望的吗?并不是,作者提出 Hinton 这样的前驱把深度学习的研究方向带偏了,应当将深度学习和符号处理结合起来,这种混合人工智能或许才是最好的方向。

2、【译文】谷歌查找正在消亡 — 来自少数派:赵喧典

作者以为 reddit 才是目前最受欢迎的查找引擎,而谷歌查找正在走向消亡。以为谷歌不再被认可的原因有这几个:

  • 广告:谷歌的大部分收入来源于广告,但过多广告占据查找词条会严重影响用户体会。
  • SEO 优化:许多人的作业便是查找引擎优化,这违反了公正也会导致查找质量下降。
  • 人工智能:人工智能在尝试帮你找到你想要的内容,但这种推测常常让人不满意。

3、领导,我想改进团队的共享气氛 — 来自大众号:hockor

@zhangferry:大多数人都会在作业中遇到技能共享这个作业,作为 TL 应该怎么打造杰出的共享气氛呢?首先清晰杰出的共享气氛是有很大优点的,比方提高团队的技能视野、发现团队牛人、提高团队战斗力、扩大团队影响力等。共享方法较普遍的定期举行技能共享会,任何的共享行为都应该被鼓励。“共享本身是一种精神上自我实现的行为,所以无论共享内容怎么,至少这种行为是慷慨的,咱们应该及时的、活跃的反响,去鼓励他们往前更进一步”。

一起作为共享的参与者,咱们应该抱着探索者的活跃的心态去听,有参与感的学习方法是十分高效的。

4、Usage statistics of content languages for websites — 来自网站:W3Techs

@zhangferry:当时国际上的网站按言语划分的话,英语最多,这个毋庸置疑。但第二多的竟然是俄语,更令人意外的是,作为运用人口十分多的汉语,其网站数量占比竟然排到了第 10 位。我能想到的原因是,俄语区域互联网开展比较早,催生了许多网站;汉语尽管运用人数多,可是相对会集,国内互联网的开展比较晚,近几年移动互联网浪潮催生了许多 App,但网站的创建则很少。

网站是目前人们获取信息最重要的途径之一,英语网站远超其他语种,也反响了当时英语国际的话语权是更大的。

iOS摸鱼周报 第四十七期

学习材料

收拾修正:Mimosa

Rust 数据结构与算法

地址:github.com/QMHTMY/Rust…

一本 Rust 书本,有简体和繁体版(英文版和日文版正在撰写中),内容包含算法分析,根本数据结构和算法,外加一些实战,共有九章。包含了咱们常用的常见的数据结构的实现和讲解,配有详实的代码和清晰简明的图解。

iOS摸鱼周报 第四十七期

工具引荐

收拾修正:CoderStar

Aria2GUI

地址:github.com/yangshun102…

软件状况:免费

软件介绍

Aria2GUI 是一款支撑多种协议的轻量级命令行下载工具,能够轻松的下载离线资源。

iOS摸鱼周报 第四十七期

关于咱们

iOS 摸鱼周报,首要共享开发进程中遇到的经验教训、优质的博客、高质量的学习材料、有用的开发工具等。周报库房在这里:github.com/zhangferry/… ,假如你有好的的内容引荐能够通过 issue 的方法进行提交。别的也能够申请成为咱们的常驻修正,一同维护这份周报。另可关注大众号:iOS生长之路,后台点击进群交流,联系咱们,获取更多内容。

往期引荐

iOS摸鱼周报 第四十六期

iOS摸鱼周报 第四十五期

iOS摸鱼周报 第四十四期

iOS摸鱼周报 第四十三期