老司機 iOS 週報 #62 | 2019-04-08

老司機iOS週報發表於2019-04-08

老司機 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)

@anotherenCIFilterCore 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 儲存堆疊。

推薦閱讀:

? 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)會推送訊息,歡迎關注。

老司機 iOS 週報 #62 | 2019-04-08

同時也支援了 RSS 訂閱:github.com/SwiftOldDri…

說明

? 表示需翻牆,? 表示編輯推薦

預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)

相關文章