老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

欢迎我们的新编辑 @CrazyCoderShi 加入周报团队,@CrazyCoderShi 在跨端方案尤其是 Flutter 方向均有较深的研究,希望接下来能为大家带来更优质的相关内容~

新闻

Can we do something for 996 programmers in China?

996.ICU 在近来在国内互联网圈子里引发了不小的轰动,GitHub 上的仓库已经累计了 18w+ 的 star。而 Python 之父 Guido van Rossum 也同样关注着这个事件,早先就在推特上发声,而现在又在社区发起了一个讨论,希望能征集到一些切实可行的措施来改善这一现象。

新手推荐

? flutter_go / flutter_ui

@CrazyCoderShi:Flutter 自打发布以来一直是热门话题,对于新手入门来说,一个完整且规范的项目是不可多得的学习资料,flutter_go 出自阿里拍卖前端团队,flutter_ui 出自 YY 团队,两者均提供了丰富的组件示例,代码规范完全遵循 Effective-Dart 规范,新手入门 flutter 必备,通过这两个项目您将学习到以下知识点:

  • flutter 基础组件的使用方法
  • flutter 动画应用( flutter_ui )
  • 基于 scoped_model 的 flutter 状态管理 ( flutter_ui )
  • 如何组织一个多 tab 应用

? 简单易懂 KVC 基础篇

@JimQ:一篇循序渐进地介绍 KVC 这门技术的文章。

  • 首先,分普通和特殊用法两部分讲述了与 KVC 相关的一系列 API 接口,并给出了这些 API 的思维导图;
  • 原理解析与实践,指出 KVC 协议中最关键的部分就是访问者搜索模式,并介绍了其中一种模式即可变数组的搜索模式;
  • 最后,讨论了 KVC 与 KVO 的实现机制之间是否有相关性,认为 KVC 是 KVO 实现的基础。

文章

? ? 小程序渲染架构设计

@折腾范儿_味精:BATT,微信,支付宝,头条,百度,都纷纷推出了自己的小程序,小程序这个概念已经广泛的渗透到了各大公司各大平台。

  • 小程序的架构有什么好处?为什么各大公司都倾向于用这样的小程序式的架构?
  • 小程序的架构是什么样子?这一套架构实现上与 H5/RN/Flutter 他们之间有什么差异?

带着这些问题,来深入这篇文章,让我们从,用户的角度/平台的角度/架构与代码实现的角度,深入剖析一下“小程序”

? ? 燃烧我的卡路里——Flutter 瘦内存、瘦包之图片渲染组件

@tom510230:本文介绍了闲鱼在做 Flutter 工程中具体遇到的性能优化场景,并且提高了解决思路

  1. 内存问题 --- 连续 push flutter 界面内存累积

  2. 安装包问题 --- 过渡时期两份重复资源文件

  3. 寻址缓存问题 --- 原有的寻址缓存策略无法复用

  4. 图片复用问题 --- Native 和 Flutter 重复下载相同图片

总体而言,Flutter 要想获得跟 native 差不多的性能,在不依赖原生 hybrid 组件的前提下,要对 Flutter Engine 做深度的定制,本文聚焦在了 OpenGL 渲染方面的性能改进。

? 运行时 Hook 所有 Block 方法调用的技术实现

@含笑饮砒霜:项目中为了监控拦截或统计一些行为时,可能会用到 Hook 机制。可以使用 Method Swizzling 技术去 Hook 一个 OC 方法,可以通过修改导入函数地址表中的信息来 Hook 一个 C 函数,那如何 Hook 一个 Block 对象的函数调用呢?这需要解决如下问题:

  1. 如何在运行时将所有的 Block 的 invoke 函数替换为一个统一的 Hook 函数

  2. 这个统一的 Hook 函数如何调用原始 Block 的 invoke 函数

  3. 如何构建这个统一的 Hook 函数

Block 对象也是一种 OC对象,通过探究,最终要执行替换的是 retain 方法, 至于为何以及如何替换 retain 方法,有兴趣的同学可以参考学习一下。

? 跨平台技术演进

@aaaron7:随着 Flutter 越来越流行,标志着无线端跨平台技术进入了第三个阶段,从最开始的 H5 + Native 的 hybrid 应用,到基于 DSL + 原生组件的 RN/Weex, 再到 DSL + 跨平台渲染组件的 Flutter。这些年跨平台技术的快速迭代,也促进了无线端技术栈和前端技术栈进行了各种各样的融合与尝试,也演化出类似 PWA,小程序这样独特应用场景的创新技术。本文作者总结了这一系列的技术,并针对性的分析了优缺点,算是不错的科普文章。深度一般,适合对相关技术不太了解的技术同学学习。

? Swift Tip: Collection Protocols

@享耳先森:在 Swift 中,有许多 Collection 相关的协议,每个都有自己的作用,了解这些协议各自的作用,在写算法时将非常有帮助。本文摘录自 Advanced Swift 这本书,作者们正在更新 Swift 5 相关内容,如果你之前买过电子版的话,将能免费更新。

? A Glimpse into Generic Meta-Programming in Swift

@老峰:VFL(Visual Format Language),是苹果公司为了简化 Autolayout 的编码而推出的抽象语言,其表达式通常是字符串,编译器无法在编译期验证表达式是否有误。基于这样的背景,本文作者以构建一个在编译期确保安全的 VFL 助手库为例,介绍了Swift 中的泛型元编程,点击这里查看本文 源码,这里有这篇文章的 翻译 可供参考阅读。

? Introduction to Swift Keypaths

@极速男孩 :在 Swift 中可以方便的通过 Keypath 对一个类进行类型安全的赋值和取值操作。本文首先介绍了 Swift 中的 Keypath 的基本用法和概念,然后给出一些实际的例子,并就如何在日常工作中使用 Keypath 给出一些建议和提示。

由 yuhanle 推荐

? The Pragmatic Guide to Scalable Swift Architecture for 2019

@四娘:这算是一篇架构散文,作者在文章里通过一问一答的形式去阐述自己对于架构的理解:

  1. 高薪程序员是如何在团队里逐步推进架构改造的?
  2. 如何解决异步代码逻辑分散的问题的?
  3. 如何在依赖注入时保障安全性和可复用性?
  4. 如何通过状态和事件的解耦让 ViewController 的代码质量变得更高?
  5. 如何解耦 ViewController 里的跳转逻辑?

设计

? Everything you need to know about Loading Animations

@张嘉夫:这篇文章对加载动画进行了深入的介绍,包括加载动画的发展历史、入门指南、何时应该简洁何时又应该充满细节、实用的工具和资源等等,可以帮助你创造更加优秀的用户体验。

工具

cocoapods-binary

@小非86:在 CocoaPods 中,即使没有对项目中的 Pod 进行任何修改,Xcode 也仍然会重新编译 Pod。这在大型项目中是一件十分痛苦的事情。因此,Carthage 甚至将二进制管理作为其核心功能。但其实 CocoaPods 在官方指南的“插件”章节介绍一款可以支持二进制管理的 CocoaPods 插件 CocoaPods Binary。

CocoaPods Binary 通过在 Pod 安装期间预编译你的 Pod,然后将二进制产物(例如:Framework 文件)添加到生成的 Pods 项目中,使 Xcode 没有重新编译代码的机会,以此实现二进制管理。

CIFilter.io (Core Image Filter Reference)

@anotheren:CIFilterCore Image 的一个重要组成部分,但是 Apple 提供的 文档 已经提示不再更新,缺少新加入系统的 CIFilter 的使用说明。CIFilter.io 提供了完整的列表搜索,以及其相关用法。甚至它还提供了一个 App 来展示各个 CIFilter 的实际使用效果,你可以在 这里 找到相关源码。

代码

? Matrix for iOS/macOS

@J_Knight_:Matrix for iOS/macOS 是一款微信团队研发并日常使用的性能探针工具,目前集成在 iOS 和 macOS 微信的 APM(Application Performance Manage)平台中使用。 Matrix for iOS/macOS 当前监控范围包括:崩溃、卡顿和爆内存,目前包含两款插件:

  1. WCCrashBlockMonitorPlugin:捕获卡顿堆栈插件,基于 KSCrash 框架开发,具有如下特点:

    • 通过检查 Runloop 运行状态判断应用是否卡顿,同时支持 iOS/macOS 平台;
    • 具备耗时堆栈提取能力,可获取最近时间最耗时的主线程堆栈。
  2. WCMemoryStatPlugin:内存监控插件,能够全面捕获应用出现爆内存时的堆栈以及内存分配的情况,具有如下特点:
    • 在应用运行期间获取对象存活以及相应的堆栈信息,在检测到应用爆内存时进行上报;
    • 使用平衡二叉树存储存活对象,使用 Hash Table 存储堆栈。

推荐阅读:

  • Matrix for iOS/macOS 正式开源了
  • Matrix-iOS 卡顿监控

? objc_msgSend_hook

@红纸:作者利用 fishhook 原理巧妙的实现了对于 arm64 架构下 objc_msgSend 函数精简版的 Hook,代码量很少,可以有效工作且每一行代码都有注释(贴心~)。

由 @首先很有趣 推荐

RoughSwift

@在等简历の邦Ben:Swift 写的一个卡通手绘风格图形库,提供了所有基本类型(线,矩形,圆,圆弧等等),包括 SVG path。如果有同学想做点萌萌有趣的 APP 不妨考虑使用一下。

LVThemeKit

@JimQ:作者开发中用到多个区域切换多套皮肤的功能,之前版本中新增功能或主题时要新增许多冗余代码,针对此借助 OC 的泛型和 KVC 进行了一次重构,代码是重构后的实现。

由 吕鹏伟 自荐

内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想找工作,点这里:www.yuque.com/iosalliance…

如果你想招人,点这里:www.yuque.com/iosalliance…

当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。

关注我们

我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。

同时也支持了 RSS 订阅:github.com/SwiftOldDri… 。

说明

? 表示需翻墙,? 表示编辑推荐

预计阅读时间:? 很快就能读完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)

转载于:https://juejin.im/post/5caabf39f265da25145018e6

老司机 iOS 周报 #62 | 2019-04-08相关推荐

  1. 老司机 iOS 周报 #67 | 2019-05-13

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

  2. 老司机 iOS 周报 #48 | 2018-12-17

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

  3. 老司机 iOS 周报 #65 | 2019-04-29

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

  4. 老司机 iOS 周报 #66 | 2019-05-06

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

  5. 老司机 iOS 周报 #36 | 2018-09-17

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

  6. 老司机 iOS 周报 #56 | 2019-02-25

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

  7. 老司机 iOS 周报 #49 | 2018-12-24

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

  8. 老司机 iOS 周报 #50 | 2019-01-02

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

  9. 老司机 iOS 周报 #47 | 2018-12-10

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

最新文章

  1. ATS上的hosting.config和volume.config文件解读
  2. IE浏览器与非IE浏览器JS日期兼容性问题处理
  3. wxWidgets:wxCalendarCtrl类用法
  4. CRMEB后台前端文档说明
  5. 三菱plc编程实例3000_三菱入门PLC编程PLC系统程序包括哪些
  6. Tomcat 总体结构
  7. (实模式+保护模式)模式切换的过程步骤(代码+文字解析)
  8. 基于智能手机Android平台音乐播放器全程开发实战
  9. ap 目标检测算法map_目标检测mAP怎么计算
  10. UITextField对字符串的个数限制
  11. python避坑_Django搭建项目实战与避坑细节详解
  12. python默认数据转换_Python数据转换与答案
  13. 28 岁字节程序员退休,财务自由
  14. 一路波折----记我的win10环境下scala安装之路,解决命令窗口报错问题
  15. Bluetooth以及音频协议 基础知识学习
  16. 跑得快,打不死!清华大学开发“小强”机器人,壮汉狂踩也挡不住前进步伐
  17. 电脑桌面显示不全设置方法
  18. Mac入门指南(二)常用命令
  19. CSS特效八:开关按钮
  20. STM32F103驱动四位共阳极数码管程序

热门文章

  1. 【PYTHON】 Pilow 将半透明图片绘制到图片中
  2. 使用Photoshop CS 扣公章
  3. 人工智能时代的主要特征是什么?
  4. RN使用native-nivigation3.0.9后报错3: unexpected char: '\' @ line 3, column 133. s\react-native-gestu
  5. 基于Java+SpringBoot+Thymeleaf+Mysql校园运动场地预约系统设计与实现
  6. uva 11134 Fabled Rooks
  7. cadence 通孔焊盘_Cadence学习3(通孔类焊盘的建立)(转)
  8. springboot 相同类名但不同包,报错non-compatible bean definition of same name and class
  9. 【补作业】msp430单片机(一)控制LED灯的亮灭
  10. STC12C5A60S2软件模式SPI读取DS1302时钟实时显示在1602