老司機 iOS 週報 #39 | 2018-10-15

老司機iOS週報發表於2018-10-15

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

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

新聞

Swift in 2018

JetBrains 針對 Swift 程式設計生態做了一個調查。結果顯示只使用 Swift 的開發者佔比 54%,混編的佔 16%。83% 的 Swift 開發者在使用 4.0 或者以上的 Swift 版本。

僅 23 天,iOS 12 安裝率超過 50%

iOS 12 推出僅 23 天裝機量超過 50%,而 iOS 11 達到這個成績用了超過一個月。相比 iOS 11 釋出後的 bug 滿天飛,iOS 12 的改進贏得了使用者口碑。

文章

? 質量監控 - 卡頓檢測

卡頓檢測是 APM 裡體驗是否流暢的重要標準,被大家熟知的卡頓檢測方式通常是基於主執行緒是否執行任務過載來進行。這篇文章較為系統地分析了卡頓檢測的各種手段及其實際效果和效能損耗,除了藉助 Instruments 工具,在程式碼側還有 FPS、Ping、Runloop、Stack Backtrace 和 msgSend observe 5 種手段。

? It’s wrappers all the way down

"Swift 標準庫目前的求值策略是:如果一個操作的惰性求值是無需消耗效能的話,那就應該讓它成為一個惰性操作。如果惰性求值的實現反而會消耗效能的話,那應該就讓它及早求值,如果它有一種等價的 lazy 實現的話,那就應該通過 .lazy 去實現。"

基於這種求值策略,我們在對陣列進行一些複雜的操作時,更 Swifty 的方式是考慮如何為這一種操作建立合適的 wrapper。這篇文章帶著我們重新實現 lastIndex(of:) 函式,為這一種集合操作建立 ReversedCollection2 的抽象,並解釋 joined / reversed 之類的集合操作的原理。

? 如何實現可以獲取最小值的棧?

這是前幾周微博上和微信大家爭相轉發的一篇公眾號文章。文章用漫畫的形式講了一道演算法題目的解題過程、文中一步一步逐漸深入,逐漸優化,最後得出最優解。

其實在真正的面試過程中,情況也是一樣的。面試官很多時候並不希望你能一次就給出最優解,反而是期待你能從最簡單的暴力解法開始,一步一步優化出最優解。面試中很多同學一旦遇到了自己曾經準備過的題目,往往會選擇直接寫出最優解,殊不知很多時候反而會得到一個負面評價,原因是你曾經做過了這道題,但是卻沒有主動讓面試官換一題新的,不夠誠實。這種時候,跟著面試官的思路,從暴力解法開始一步一步優化,最後得出最優解,反而更能體現你的解決問題的能力。

沒讀過這篇文章的同學不妨讀讀文章,來看看解題應該是個怎麼樣的思考過程。

? [譯] 揭祕 iOS 佈局

iOS 的佈局系統是每個 iOS 工程師都需要具備的基礎知識,我們可能每天都在跟諸如 setNeedsLayout()、updateConstraints() 之類的方法打交道,但是可能並沒有形成一個非常系統的認識。本文作者詳細講解了每個方法的作用以及不同方法之間的聯絡,相信能帶給大家一個相對全面的認識,加強對佈局原理的理解。

? iOS Memory Deep Dive

這是一篇內容非常詳實的文章,作者圍繞著記憶體這個話題,從現代計算機作業系統的虛擬記憶體機制一步步講到 iOS 的虛擬記憶體機制,最後給出了在實際開發中一些如何高效能運用記憶體的建議。

? Access Control Management with Swift

本文介紹了使用者許可權管理的抽象方式,構建了一個基於使用者屬性的訪問控制框架(Attribute Based Access Control),利用了 swift 中 protocol 的強大功能,以策略(Policy = Role ShouldBeAbleTo Action when Condition)的形式,對需求進行建模。該框架可以以非常小的變更成本,增加新的策略來維護許可權要求,最後產生的判斷使用者許可權的 API 也非常優雅。

? How to Write Clean Code

本文是一篇介紹 Code Review 工作流程的文章,從以下四個維度介紹了作者的經驗

  1. Code Review 的必要性和最佳時間點
  2. 如果已經準備提交 Review ,注意程式碼規模(太多別人看不來,太少看不出端倪)
  3. 執行 Code Review
  4. Code Review 的例子 總體而言,Code Review 應該是審查程式碼內容、程式碼邏輯和安全邊界,如果可以的話連測試用例也一起進行 Review,對於程式碼風格類的東西應該藉助 Checkstyle、TSLint、Baseline、Prettier 等工具完成,而 Review 的記錄應該儲存在一個平臺上以供參考,可以使用 Reviewable、Gerrit、GitHub 等工具

? ? On Learning to Code (for 2019)

通過谷歌 learn to code 趨勢可以看出從 2012 年開始人們學習編碼併成為職業人員的趨勢開始有所增長。作者就自己從業 7 年的經驗,給大家分享作者認為很重要的三點。

  1. 學習的初始程式語言應與您的目標保持一致
  2. 電腦科學≠軟體工程
  3. 技術面試並不是完美的

工具

JSDebugger 一款iOS的動態偵錯程式

一款可以動態在 iOS 中執行除錯程式碼的工具,原理是利用 JavascriptCore 與強大的 iOS Runtime 還有很多其他的 dynamic call 方式來結合形成的一套可以動態除錯 iOS app 的工具。工具內的程式碼堪稱對 JSCore 還有 iOS Runtime 學習的樣本,值得一看,值得一學

Sizes

Sizes 這款工具可以根據不同 iPhone/iPad 裝置及尺寸規格、橫豎屏、字型預覽介面顯示效果,省去同時開啟很多模擬器並來回切換的麻煩,提高佈局測試的效率。

程式碼

smoke-framework

SwiftNIO 的推出被視作 APPLE 終於肯“認真對待” server-side swift 的標誌。目前各大 swift 服務端框架都紛紛接入了 SwiftNIO 的支援。簡單的總結 SwiftNIO 就是:很強。

smoke-framwork 是 Amazon 推出的 server-side swift 的框架,預設使用 SwiftNIO 來做網路層,並且支援 OpenAPI 這樣的程式碼自動生成工具。Amazon 作為行業主要是雲服務提供商,這個釋出是極具指導意義的,代表 swift 真正被服務端市場所接納、認可。雖然目前針對 smoke-framework 的評測還不多,但基本可以確定的是該框架會和 Amazon 的 AWS 生態有較好的融合,這對於絕大多數公司而言絕對是利好。

還等什麼呢,學就 vans 了。

推薦人:LeeCenY

Logan

對於一個 App 來講,日誌的收集、上報、查詢是非常重要的。而目前在各個公司中,對日誌的處理大多並沒有形成一套完整的體系,都是針對不同的日誌型別,如crash、效能、打點等等進行單獨的處理。近日,美團點評開源了移動端基礎日誌庫 Logan ,Logan 是一個功能完善、無侵入的日誌框架,解決了很多移動端日誌方面的痛點,並且擁有較好的效能,可以很方便的接入。

音視訊

NSSpain

一份來自西班牙 Cocoa 開發者的視訊合集,最近一篇就來自 Mattt 大神,同時,作為英語聽力材料也是很棒的說。

? SwiftConf '18

Swift Conf 是歐洲技術愛好者組織的 Swift 大會,今年大會的主題演講視訊在大會完成之後立刻放了出來,裡面包括一些今年比較火的主題,例如機器學習,ARKit,Swift ABI 穩定,Swift 服務端開發等,有興趣的同學可以看一下。

內推

關注我們

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

老司機 iOS 週報 #39 | 2018-10-15

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

本期編輯

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

說明

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

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

相關文章