老司機 iOS 週報 #119 | 2020-07.13

老司機 iOS 週報,只爲你呈現有價值的信息。javascript

你也能夠爲這個項目出一份力,若是發現有價值的信息、文章、工具等能夠到 Issues 裏提給咱們,咱們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。前端

熱烈歡迎週報團隊的第 33 個編輯 - @JonyFang!他是 TIME 時間卡 App 的開發者,目前就任於原本生活網 P2C 項目組。java

新手推薦

🐎 Benefits of using throwing functions (try) - Swift's most underrated feature?

@zvving:Swift 新手面對 do-try-catch 常望而卻步,調用時使用 try? 輕率處理,對外提供錯誤處理時通常使用 Result 返回錯誤,Throwing 幾乎不是一個可選項。 本文做者認爲 do-try-catch 多是最被低估的 Swift 語言特性,並給出合理使用錯誤處理的建議:ios

  • Result & Throwing 均可以做爲函數返回錯誤處理的方式
    • 須要業務方顯式處理 Error 時,推薦 Result
    • 業務方不關心錯誤,指望更外層處理時,推薦 Throwing
    • 一個方法內有多種類型錯誤須要返回時,只能選擇 Throwing
  • XCTestCase 對 Throwing 有很好的支持:Case 書寫能夠更聚焦於自身邏輯
  • Result 與 Throwing 能夠方便的相互轉化

關於錯誤處理文中未說起的幾點也值得留意:git

  • 雖然語法類似,但 swift-try-catch-error(錯誤處理) 與 objc-try-catch-exception(異常處理)並不相同
    • Objc 中異常處理由於性能和安全問題,不推薦使用
    • Swift 中的錯誤處理不涉及解析調用棧,性能好很是多,能夠和 return 語句相媲美,推薦靈活選用
  • Swift 中錯誤處理也要留意資源清理的工做,推薦經過 defer 完成

文章

🐕 🌟 Flutter 上的內存泄漏監控

@CrazyCoderShi:Flutter 所使用的 dart 語言具備垃圾回收機制,有垃圾回收就避免不了會內存泄漏, 內存泄漏的檢測在各個端都是 Debug 的重頭,iOS 側的 Instruments , Android 側的 LeakCanary ,本文將會帶你實現一個 Flutter 可用的 LeakCanary。程序員

🐕 🌟 Apple Clip 技術詳解

@享耳先森:蘋果在 WWDC2020 上發佈了 App Clip,本文從產品定位及實現細節上介紹了 App Clip 的方方面面,還與 PWAInstant Apps小程序 進行橫向比對,推薦閱讀。github

🐢 🌟 帶你打造一套 APM 監控系統

@JonyFang:應用性能管理對一個應用的持續穩定運行相當重要。因此這篇文章就從一個 iOS App 的性能管理的維度談談如何精確監控以及數據如何上報等技術點,着重總結了 APM 的緣由以及如何收集數據。APM 數據收集後結合數據上報機制,按照必定策略上傳數據到服務端,服務端消費這些信息併產出報告。算法

  • 卡頓監控
    • 屏幕繪製原理
    • 卡頓產生的緣由
    • APM 如何監控卡頓並上報
    • 堆棧 dump
    • Mach Task 知識
  • App 啓動時間監控
    • App 啓動時間的監控
    • 線上監控啓動時間就好,可是在開發階段須要對啓動時間作優化。
  • CPU 使用率監控
    • CPU 架構
    • 獲取線程信息
  • OOM 問題
    • iOS 內存知識
    • 獲取內存信息
    • 如何斷定發生了 OOM
    • 內存信息收集
    • 開發階段針對內存咱們能作些什麼
  • App 網絡監控
    • App 網絡請求過程
    • 監控原理
  • 電量消耗
    • 如何獲取電量
    • 定位問題
    • 開發階段針對電量消耗咱們能作什麼
  • Crash 監控
    • Crash 收集方式
    • KSCrash 的使用包裝
    • 符號化
    • 服務端處理

🐕 乾貨 | 攜程 RN 渲染性能優化實踐

@looping:本文從理論方案、操做過程以及實用工具三個方面系統地總結介紹了攜程在 React Native 渲染優化方面的實踐經驗,同時部分優化理論也一樣適用於 H5 與 Native 平臺。但願這篇文章能爲對跨平臺性能優化感興趣的小夥伴帶來一些實際的幫助與啓發。編程

🐢 打造一個通用、可配置、多句柄的數據上報 SDK

@AidenRao:一個 App 通常會存在不少場景去上傳 App 中產生的數據,好比 APM、埋點統計、開發者自定義的數據等等。本篇文章講如何設計一個通用的、可配置的、多句柄的數據上報 SDK。內容比較詳細,既能夠做爲設計數據上報 SDK 的參考,也能夠用來了解數據上報 SDK 的實現原理。小程序

🐢 iOS Memory 內存詳解

@含笑飲砒霜:爲了從根本上更好地理解和分析 iOS 系統上的內存特性,咱們要了解通常操做系統的內存管理、iOS 系統內存和 app 的內存管理。本文主要內容的目錄以下:

  • 操做系統的內存機制

    • 馮.諾伊曼結構
    • 存儲器的層次結構
    • CPU尋址方式
    • 虛擬內存
    • 內存分頁
  • iOS 內存機制

  • iOS 系統內存佔用

    • clean memory & dirty memory
    • compressed memory
    • 內存佔用組成
  • iOS app 內存管理

    • iOS app 地址空間
    • 引用計數
    • 循環引用
    • weak 和 unowned
    • 不會致使循環引用的狀況
  • OOM 崩潰

    • jetsam機制
    • 如何檢測OOM
    • OOM的常見狀況
  • 內存分析

🐕 The Origins of Objective-C at PPI/Stepstone and Its Evolution at NeXT

@蓮叔:OC 毫無疑問是移動互聯網時代最有影響力的編程語言之一。咱們都知道 OC 是 NeXT 主要編程語言,隨着 NeXT 被蘋果收購後就成爲蘋果主推的編程生態,但其實 OC 並非 NeXT 發明的。OC 的前身叫 Object-Oriented Pre-Compiler(OOPC),其做用是將 Smalltalk 語言轉換爲 C 語言。當時正處在「軟件危機」的時代,關於如何更好的提高開發效率的研究如火如荼,OOPC 也是其中的一個研究項目。關於 OC 的發展值得回味的地方還有不少,有興趣的同窗能夠看一下這篇由 OC 原做者和 NeXT 退休工程師共同撰寫的關於 OC 發展歷史的論文,很是詳細的列舉了不一樣時代的 OC 的迭代,能夠看到不一樣的 feature 分別都是在什麼樣的背景下被髮明出來的,對於將來怎麼用好這些 feature 也很是有幫助。

🐕 動手實現一個精簡的動態佈局 DSL

@老峯:AutoLayout 是目前 iOS 上經常使用的佈局方案,而它的本質也是經過 Cassowary 求出元素具體的位置與大小。這個系列做者將基於 Flex 佈局算法,打造一個基於 C++ 的跨平臺佈局 DSL,實現一個精簡動態佈局引擎。那怎麼才能讓數據動起來呢?React Native 是經過 javascript 來實現數據動態化的,而這個系列做者基於編譯器前端技術實現一個自定義的腳本,利用 C++ 實現一個精簡的腳本解釋器完成數據動態化。Flex + Script 實現元素的佈局計算,再經過原生渲染。對自定義動態佈局 DSL 感興趣的讀者不防閱讀。

🐕 Flutter 中的圖文混排與原理解析 | 開發者說·DTalk

@極速男孩:圖文混排是在開發中比較常見的需求,在 flutter 中咱們主要經過在 Text.rich 中添加 TextSpan 和 WidgetSpan 來實現,咱們能夠經過 WidgetSpan 來添加任何你想要的 Widget,包括 Image 和 Card 等。這篇文章主要經過分析 RichText 的源碼,看到 flutter 如何經過 MultiChildRenderObjectElement 來管理當中的 Widget,並如何一步步的如何去繪製這些 Widget 的。

🐕 iOS Jailbreak Principles 0x02 - codesign and amfid bypass

本文是 iOS Jailbreak Principles 系列文章的最新一篇。前面的文章介紹了從內核漏洞到 tfp0,再到 rootfs 系統可讀寫。但到這爲止,咱們能作的事情仍是比較有限的,爲了作更多事情須要控制系統的 binary 或者分發本身的 binary 到系統,而爲了作到這樣,則必須繞過 codesign 機制。本文分析了 iOS 12 之後的 codesign 機制,隨後從 amfid 入手分析了其繞過方案和實施過程。

🐎 @StateObject 和 @ObservedObject 的區別和使用

@JonyFang:今年 SwiftUI 補完了很多內容,其中狀態管理方面是一個重要的話題。對於那些從外界接受 ObservableObject 的 View,到底是使用 @ObservedObject 仍是 @StateObject,須要根據狀況和須要肯定。像是那些存在於 NavigationLink 的 destination 中的 View,因爲 SwiftUI 對它們的構建時機並無作 lazy 處理,在處理它們時,須要格外當心。本篇博客文章展開介紹了 @StateObject 和 @ObservedObject 的區別和使用。

🐕 iPadOS 鼠標的設計哲學

@張嘉夫:做者王禹效在這篇文章裏詳細分析了 Apple 是如何爲 iPadOS 設計鼠標功能的,包括與傳統桌面操做系統鼠標在邏輯、顯示和設計上的區別,以及 Apple 作出這些改變的緣由。做者認爲其實 Apple 不是什麼魔法師,只是在設計時認真的去爲用戶作考量,願意在這些別人不在乎的細節上投資。一點點積累以後,就有了本身獨特的用戶體驗。

🐎 iOS Crash 分析攻略

@老驢:淘系技術出品的一篇關於 Crash 的文章。從基礎到深刻的介紹 Crash 日誌渠道、Crash 捕獲的原理、看懂 Crash 日誌、Crash分析方法。這些東西可能在平時的開發中已經被 crash kit 工具所處理,不少時候你們並不會去深究其中的原理和含義。而這篇文章就很好的補充了這些。

其中的一些 debug 技巧很實用,在開發中也能夠嘗試着實踐一下。總之,這是一篇不錯的從入門到精通類的文章,值得一讀。

音頻

🐕 網戀奇遇記 :偶遇殺豬盤之我能反殺

網絡一線牽,珍惜這段緣;時間套路深,網戀需謹慎。

這期播客講述了一個程序員使用網戀交友應用後遇到「愛情騙子」的故事,厲害的是小哥憑藉執着的正義感最後成功追回騙款,還增長了額外收入。但願經過這期節目能夠提升你們對網戀的警戒性。前 5 分鐘主播們在平常寒暄,着急的朋友能夠從 5 分鐘後開始直接進入。

內推

老司機週報團隊聯合知識小集和 SwiftGG 翻譯組收錄了一份靠譜的內推職位。

若是你想找工做,點這裏:www.yuque.com/iosalliance…

若是你想招人,點這裏:www.yuque.com/iosalliance…

固然,也歡迎你關注咱們每一期的週報,咱們會在每期週報底部及時更新編輯內推崗位。

關注咱們

咱們開通了公衆號,每期發佈時公衆號(OldDriverWeekly)會推送消息,歡迎關注。

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

說明

🚧 表示需某工具,🌟 表示編輯推薦

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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息