老司機 iOS 週報 #37 | 2018-09-24

老司機iOS週報發表於2018-09-25

老司機 iOS 週報,只為你呈現有價值的資訊。

你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。

新聞

Swift 4.2 正式釋出

Swift 4.2 正式釋出。我們可以通過 WWDC 2018 的 Session What’s New in Swift 快速瞭解新特性。Ole Begemann 總結的 Playground 也方便我們上手試驗把玩。

一本走心的 JS-Native 互動電子書

知識小集團隊 @lefe_x @halohily 同學潛心著作的一本學習 JS-Native 互動的電子書,這個專題旨在能夠幫助更多的同學掌握 Hybrid 在 iOS 中的應用。整個專題總共分為四章,強烈推薦給大家

第一章 主要介紹 JS 語法,為後續的章節做好鋪墊,不過建議讀者系統地學習一下 JS,對整個專題的理解有很大的幫助;

第二章 介紹了 JavaScriptCore 這個框架與 OC 間的通訊;

第三章 介紹了 WKWebView,以及一些除錯技巧;

第四章 主要對前面講到的知識進行實踐,其中 JSPatch 部分理解起來比較吃力,如果讀者想深挖 JSPatch可以結合原始碼一起看本章內容,理解起來更透徹。

微信開源基於 mmap 記憶體對映的 key-value 元件 MMKV

微信團隊於最近宣佈開源 MMKV,這是一個基於 mmap 記憶體對映的 key-value 元件。而這個元件在微信內部已經使用了 3 年,穩定性上得到了驗證。而在效能上,也比傳統的 NSUserDefaults 等方案更加出色。並且也移植到了 Android 平臺,在這次一起開源。

專欄

? Swift for TensorFlow, First Class Machine Learning in Swift

Swift for TensorFlow 是 Chris 到 Google 之後釋出的新專案,目的在為 Swift 提供內建的機器學習能力。整個技術用了非常巧妙的方式,在編譯器層面實現了對 TensorFlow 的支援,非常創新。並且從專案的設計思路也能夠感受到 Chris 對 Swift 這門語言的一些想法,Swift 絕不簡單是客戶端或者服務端程式語言,而是一個全新的程式設計平臺,開放優雅的架構使其能夠無縫和其他語言進行互動,而且是在型別安全的前提下。

我在 2018@Swift 大會上分享了一這項技術的一些原理和應用,這篇文章是分享的文字版。

Swift for TensorFlow

? [譯]SE-0206 Hashable 加強

Swift 4.2 其中一個比較大的改動就是 Hashable 協議,對這麼一個基礎的協議做改動,即使在一年出一門新語言的 Swift 大家族裡也幾乎是第一次?‍♂️,看到這篇提案的時候我就產生了這麼幾個疑問:

  1. 為什麼要用 inout 這種大家很陌生的概念?
  2. Hasher 好像是雜湊函式的抽象,那為什麼它不是一個泛型,而是結構體?那應該怎麼去自定義雜湊函式?
  3. 而且為什麼要去改動這麼一個基礎協議?之前的協議有哪些不足?

在查閱了一些資料之後,我發現國外對於這件事情的討論其實也不多,最好的資料還是 Swift-Evolution 的提案,所以特意翻譯出來,希望能夠幫助大家更好地瞭解這一次基礎協議改動的來龍去脈。

文章

? 這次 swift 大會分享準備的幻燈片和 demo

這次 2018@Swift 大會,戴銘的幻燈片驚豔全場,把本身就比較晦澀的編譯原理相關的知識,用美輪美奐的漫畫體現出來,給人一種耳目一新的感覺。這篇文章講了一些分享的背景還列出了全部幻燈片的截圖,錯過大會的同學不容再錯過文章。

個人最喜歡的是 AST 那幾 p,你們呢?

? Facebook 工作體驗之績效考核

本文討論了 Facebook 和國內公司的業績考核之間的異同。講來不同的考核制度本身並沒有什麼好壞之分,更多的還是在不同環境下取得對公司和員工最有利的情況。

Peak 老師自加入 Facebook 後貢獻了好多篇國內和灣區的工作生活比較的文章,對於好奇灣區這邊(不代表美國其他地區)碼農的工作生活狀態的同學,值得一讀。

? 員工之間可不可以討論工資收入?

Peak 大神丟擲了一個比較有意思和值得討論的問題,員工之間可不可以討論工資收入?Peak 大神還貼出了阿里和Facebook在這個問題上的態度對比並附上了自己的見解。不知你們對這個問題又有什麼看法呢?

? 深入淺出 Swift Numerics

Swift 社群開發者 Xiaodi Wu 寫了一系列文章,介紹了 Swift 中數字型別背後的設計思想(如 Int、Float 等)以及許多 Numeric Protocols 間的關係,建議有 Swift 開發經驗的開發者們精讀。

? FastImageCache 原理

對於大多數 app 來說,圖片存取/編解碼都是繞不過去的話題,而這通常會佔用相當一部分的計算/儲存資源,值得大家反覆研究。本文作者分析了 path 維護的 FastImageCache,從 mmap、decoding 和 byte alignment 幾個角度來分析其對圖片載入效能的優化。

? iOS 12 JS 陣列 Bug,可能帶來網際網路風波,附解決方案

iOS 12 釋出了,但很多前端同學卻發現 iOS 12 中 WebView 的一個大 BUG ,對陣列進行 reverse 操作會導致 webview 將該陣列的最後形態進行快取,關閉頁面退出頁面都不會清掉,在 StackOverFlow 上也有人探討,好在博主給了一個解決方案,快來看看吧。

? Capturing Self with Swift 4.2

Swift 4.2 中 self 在 optional binding 中不再作為保留關鍵字。現在可以忘記 strongSelf 了,直接這樣寫吧:

guard let self = self else { return }
複製程式碼

? Adding Padding To A Stack View

UIStackView 是蘋果在 iOS9 中引入的一個新的檢視類。Stack View 可以高效的排列一行或者一列檢視。在使用中,我們的子 View 很可能是需要動態調整高度的,這時候,我們既可以通過 Interface Builder,也可以通過程式碼在需要調整高度時候重新佈局。但是,實際上,我們可以更簡單高效的解決這個問題,就是使用 Readable Content Guides。

? Async/await in Swift unit tests

Async/await 一直是 Swift 開發者期待的功能,但是由於在寫單元測試的時候需要一些非同步測試場景,所以 sundell 通過對 Futures & Promises 的進一步改造實現了一個 await 函式 的作為 Swift 還沒支援 Async/await 的折中方案。整個實現思路還是很通俗易懂的。

? What I Learned Making 5 ARKit Prototypes

5 個基於 ARKit2 的原型,用來提升購物體驗、給報紙新增視訊、觀看繪畫時增強關鍵人物,使塗鴉牆能夠觀看歷史,給穿戴裝置做螢幕延展。 AR 有非常大的潛力,這 5 個原型也許能激發你的靈感。

? 2018 Google 開發者大會現場紀要

Google 今年在上海的 GDD (Google Developer Days) 上週末圓滿結束,算是一次做的非常成功的國際公司在國內搞的 Developer 相關的活動。如果你沒有去現場參加的話,趕緊跟著去參加了的開發者們去看看 GDD 上的亮點吧。

? What’s new in Swift 5.0

Swift 的下一個版本是5.0,首要目標就是讓 ABI 穩定(存疑,現在還有好幾個issue沒動靜),另外還有一些比較重要的特性,通過預設定好的playground可以體驗這些特性

  • Raw strings:可以將字串的轉義操作變得更好用了
  • Handling future enum cases:switch 操作中,default 的處理通常意味著一些未能處理得很好的邏輯,現在可以在 default 前加上@unknown標記,讓編譯器在編譯時產生一個 warning
  • Checking for integer multiples:增加了isMultiple(of:)函式,相當於之前的模除操作,譬如if rowNumber % 2 == 0rowNumber.isMultiple(of: 2)等價
  • Counting matching items in a sequence:陣列的 count 函式也可以加上一些 filter 操作了
  • Transforming and unwrapping dictionary values with compactMapValues():對於 Dictionary 物件增加了compactMapValues()函式,將compactMap()mapValues()結合起來,變得更加方便

? i​OS 12

NSHipster 出品,從 API 角度解析 iOS 12 中值得關注的改進。主要包括了以下幾部分內容:為重要資料請求提高網路優先順序、後臺讀取 NFC 標籤、使用電話號碼和電子郵件地址來匹配通訊錄、在航空中更新位置、識別平放的裝置、輸入框中的自動填充新密碼和簡訊驗證碼。十分推薦閱讀。

? 作業系統是如何管理記憶體的

作者針對Operating Systems: Three Easy Pieces這本書中關於記憶體管理這塊的做了一個小結,介紹了作業系統在處理記憶體管理中遇到的問題和演化方案,幫助讀者增加記憶體管理方面的知識

  • 如果是單程式模型,很簡單,一塊記憶體空間是核心的,一塊記憶體空間是程式的
  • 如果是多程式模型,考慮一下上下文切換問題,就需要有 base 和 bounds 來表示如何切換
  • 考慮多程式間使用記憶體的空間利用效率問題,出現了分段的解決方案
  • 為了解決分段方案帶來的記憶體碎片問題,出現了分頁的解決方案

工具

Xcode 10 小技巧: NSData 的 popover 裡可以直接下載內容

Xcode 在 debug 的時候,能夠直接檢視 UIImageNSString 等型別資料,但是一直不支援 NSData 的檢視。現在 Xcode 10 已經提供了這麼一個功能,可以允許你通過預覽小窗匯出當前正在 debug 的 NSData 物件到本地,再進行檢視。

程式碼

2018 中國 Swift 開發者大會原始檔,包括 pdf 和源工程檔案

@Swift CON 2018 - 一場面向 Swift 開發者的知識盛宴,已於 09 月 15 日在北京順利舉行。由於各種原因未能去參加的各位同行,現如今可以通過這個開發者大會原始檔瞭解到此次大會的主要內容。

Awesome README

好的 README 包括但不限於配圖、螢幕截圖、GIF、文字排版等。這是一個優秀 README 列表,以及一些幫助你寫好 README 的工具。

設計

Designing and Developing for Siri Shortcuts

作者從程式碼和 UI/UX 設計角度展示瞭如何為現有的 app 加入 Siri Shortcuts 功能,包括增加 App Store 截圖、啟動屏通知並且在設定介面裡著重展示。

內推

關注我們

我們開通了公眾號,每期釋出時公眾號會推送訊息,歡迎關注。

老司機 iOS 週報 #37 | 2018-09-24

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

本期編輯

@沒故事的卓同學@四娘@享耳先森@Damonwong@折騰範兒_味精@張嘉夫@AidenRao@Parsifal@aaaron7@方秋枋kyotom510230anotheren水水looping@JasonYuh@老老老老老老老驢

說明

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

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

相關文章