老司機 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 大家族裡也幾乎是第一次?♂️,看到這篇提案的時候我就產生了這麼幾個疑問:
- 為什麼要用
inout
這種大家很陌生的概念? - Hasher 好像是雜湊函式的抽象,那為什麼它不是一個泛型,而是結構體?那應該怎麼去自定義雜湊函式?
- 而且為什麼要去改動這麼一個基礎協議?之前的協議有哪些不足?
在查閱了一些資料之後,我發現國外對於這件事情的討論其實也不多,最好的資料還是 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 == 0
跟rowNumber.isMultiple(of: 2)
等價 - Counting matching items in a sequence:陣列的 count 函式也可以加上一些 filter 操作了
- Transforming and unwrapping dictionary values with compactMapValues():對於 Dictionary 物件增加了
compactMapValues()
函式,將compactMap()
和mapValues()
結合起來,變得更加方便
? iOS 12
NSHipster 出品,從 API 角度解析 iOS 12 中值得關注的改進。主要包括了以下幾部分內容:為重要資料請求提高網路優先順序、後臺讀取 NFC 標籤、使用電話號碼和電子郵件地址來匹配通訊錄、在航空中更新位置、識別平放的裝置、輸入框中的自動填充新密碼和簡訊驗證碼。十分推薦閱讀。
? 作業系統是如何管理記憶體的
作者針對Operating Systems: Three Easy Pieces這本書中關於記憶體管理這塊的做了一個小結,介紹了作業系統在處理記憶體管理中遇到的問題和演化方案,幫助讀者增加記憶體管理方面的知識
- 如果是單程式模型,很簡單,一塊記憶體空間是核心的,一塊記憶體空間是程式的
- 如果是多程式模型,考慮一下上下文切換問題,就需要有 base 和 bounds 來表示如何切換
- 考慮多程式間使用記憶體的空間利用效率問題,出現了分段的解決方案
- 為了解決分段方案帶來的記憶體碎片問題,出現了分頁的解決方案
工具
Xcode 10 小技巧: NSData 的 popover 裡可以直接下載內容
Xcode 在 debug 的時候,能夠直接檢視 UIImage
、NSString
等型別資料,但是一直不支援 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 開發:社招、應屆、實習均可。專案在技術上很有挑戰性,團隊技術氛圍極好。誠心希望各路大神前來切磋,也歡迎計算機基礎好的小白來共同學習。簡歷發郵箱 xuyafei01@baidu.com,暫不考慮的也歡迎微博私信 @小非86 聊聊~
-
北京-螞蟻金服 招iOS/安卓/前端開發:負責支付寶會員及帳號業務線,地點北京國貿,金臺夕照地鐵站出口 100 米。有興趣的同學歡迎將簡歷傳送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一個郵箱) 或這微博私信 @折騰範兒_味精 瞭解情況。
-
上海即刻:如果你認識聰明勤奮、膽大心細、有追求的工程師,那就來加入我們吧!任何推薦或簡歷可直接發給 Jason(即刻 iOS leader): jasy@okjike.com,或微博 @JasonYuh。
-
杭州奇志科技招聘 iOS、前端:奇志科技自 2016 年起通過行業無人機協同工作流 Mesh 進入物聯網與人工智慧領域, 併成功為房地產、建築、測繪、電力巡檢等行業提供無人機解決方案。感興趣可以微博上私信 @沒故事的卓同學 瞭解。
-
深圳頭條研發中心誠招各路 iOS 好手一起做取悅自己的專案:如想了解更多深圳頭條的資訊,可以加小T微信:tomtan,切磋技術和聊情懷都可以喔~~~~
-
北京位元組跳動 iOS 團隊持續招人中:簡歷可以傳送到郵箱 raozhizhen@gmail.com,或者新增我(@AidenRao)的微信 jingmu1994 瞭解更多公司及崗位資訊。
-
北京百度教育事業部招 iOS 開發:百度教育事業部,地點:北京西二旗。部門下面有百度閱讀,百度文庫,百度愛聽等 App 產品。團隊技術氛圍濃厚,有興趣的同學歡迎將簡歷傳送到我的郵箱:lizelei@baidu.com。
關注我們
我們開通了公眾號,每期釋出時公眾號會推送訊息,歡迎關注。
同時也支援了 RSS 訂閱:github.com/SwiftOldDri… 。
本期編輯
@沒故事的卓同學,@四娘,@享耳先森,@Damonwong,@折騰範兒_味精,@張嘉夫,@AidenRao,@Parsifal,@aaaron7,@方秋枋,kyo,tom510230,anotheren,水水,looping,@JasonYuh,@老老老老老老老驢
說明
? 表示需翻牆,? 表示編輯推薦
預計閱讀時間:? 很快就能讀完(1 - 10 mins);? 中等 (10 - 20 mins);? 慢(20+ mins)