老司機 iOS 週報 #77 | 2019-07-29

老司機iOS週報發表於2019-07-29

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

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

新手推薦

? Flutter-Notebook

@CrazyCoderShi:Flutter-Notebook 由 OpenFlutter 小組產出,包含了很多常規移動端開發的元件/效果實現, 在目錄的最後還附上了一本 Flutter in Action, 著實為一份 Flutter 入門學習不可多得的資料:

  • 官方控制元件效果實現
    • 檢視
    • 功能
    • 動畫
  • 優秀三方庫
  • 狀態管理
  • 其他

文章

? What’s New in Natural Language APIs in iOS 13

@AidenRao:去年,Apple 推出了 NaturalLanguage 框架,用於分析自然語言文字並推導其特定於語言的後設資料。你可以將此框架與 Create ML 配合使用來訓練和部署自定義 NLP 模型。

iOS 13 上此框架更新了新功能

  • 內建情感分析,對文字進行 -1.0 到 1.0 的打分,確定一組文字是積極還是負面。
  • 單詞標記,單詞應用標記系統,可用於模糊搜尋,相似物品推薦系統。
  • 自定義單詞嵌入,用於自定義單詞標記模型,控制推薦演算法。
  • 文字目錄,用於將同型別詞彙按組標記,建立簡單的單詞標記模型。

? Generalizing Swift code

@張嘉夫:判斷某一塊程式碼是否需要重構往往是件很棘手的事。雖然採用可複用的函式或型別可以大大減少程式碼冗餘,但過於抽象的程式碼會導致難以閱讀和維護。在這篇文章裡,作者通過幾個關鍵因素來幫助我們最大程度地重用程式碼,同時又能夠避免讓程式碼過於複雜或難以理解,從而取得良好的平衡。

? ? Flutter: the good, the bad and the ugly

@looping:作者在用 Flutter 開發了一款應用後,總結了 Flutter 的一些特性和自己使用後的心得體會,整體感覺是 —— “Not bad” —— 還不錯。本文雖然是大半年前寫的,但還是可以當作技術選型的避坑指南來參考。 Flutter 的好處就不用多說了,列下作者比較在意的幾個點:

  • Flutter 社群還比較小眾,貢獻者不算多,最佳實踐偏少,元件不夠豐富,出錯除錯也比較費神(社群是在逐步擴大的,但選型時還得看團隊能力和工作飽和度,能不能自己消化一些問題)。
  • UI 層自己繪製,樣式跟系統有脫離,在系統控制元件設計發生改變的時候,還得依賴社群升級相關元件(國內大部分應用介面的控制元件都是定製化的,即使原生開發也會面臨這樣的問題,不過 Flutter 會暴露的更加明顯)。
  • 跟原生混編以及平臺差異化設計(某功能只在某端有,或者介面表現不一樣等)會使整體結構變得複雜,在投入使用時就要考慮好後期的維護性(這個是跨平臺框架的通病,要避免在過於複雜的業務場景上使用)。

? 域名背後那些事

@蓮叔:很多沒有建站經驗的童鞋對於域名唯一的瞭解就是它作為 IP 別名的作用,其實域名背後的學問有很多。正確的瞭解域名解析的知識可以讓我們在設計底層網路模組的時候更有信心,並實現更優雅的網路層解決方案,比如近期在移動端非常流行的 HTTPDNS 技術,就是從域名解析的原理出發,巧妙的解決了劫持問題。leancloud 這篇文章較為體系的介紹了域名的組成結構以及 DNS 伺服器進行域名解析的基本流程,還掃盲了常見的域名記錄型別以及作用,非常適合不熟悉域名的童鞋們閱讀。

? CAEmitter​Layer

@J_Knight_:本文作者 Mattt 介紹了 CAEmitterLayer 的使用方法,並結合程式碼展示瞭如何使用 CAEmitterLayer 和 CAEmitterCell 來實現一個從上方自然落下的紙屑效果。在文章末尾,作者還給出了實現同一效果的7種不同的方案:

  • SpriteKit Particle System
  • SceneKit Particle System
  • UIKit Dynamics
  • HEVC Video with Alpha Channel
  • Animated PNGs
  • WebGL

對粒子發射器效果有興趣的讀者可以看一下這篇文章。

? ? ? Reducing Memory Footprint and OOM Terminations in iOS

@紅紙:當應用程式消耗太多記憶體,就會被系統殺掉。佔用過多的記憶體空間會增大被查殺的概率。在本文中,作者介紹了多種圖片處理技巧,讓我們更好的減少記憶體的佔用,總結如下:

  1. 更換色彩空間 sRGB(8位) 代替 DisplayP3(16位)。
  2. 利用 UIGraphicsRenderer 同時繪製同一矩陣內影象(?:聊天頭像),使用 UIGraphicsRenderer 也可以複合影象,其只需要佔用一幀大小即可。
  3. UIGraphicsRenderer 會自動識別使用 DisplayP3,而 UIGraphicsBeginImageContextWithOptions 最多使用 sRGB。
  4. 在瀑布流這種滾動展示圖片列表中,可以使用計時器統計活動中的圖片,為活動中的圖片載入剩餘的部分。
  5. 使用更小的圖片,很多圖片服務商可以對圖片進行預處理下發(參考:七牛雲圖片預處理
  6. 更好的管理快取,在進入後臺的時候都可以進行清理(例如,URL 快取、已存入磁碟的圖片記憶體快取)。
  7. 在出現記憶體警告,對於不可見的頁面,可以進行清除操作。
  8. 檢查程式碼的記憶體洩露。
  9. 不用清除基於 NSDictionary 的快取,應使用 NSCache(原因)。

? ? Managing background tasks with the new Task Scheduler in iOS 13

@zvving:iOS 13 中蘋果引入 BackgroundTasks framework,力求在提供流暢使用者體驗與延長電池使用時間之間找到平衡。本文可以快速瞭解後臺任務的新變化:

  • Background fetch mode:規則與之前一樣是 30s 執行時間,介紹如何使用新框架的 BGAppRefreshTask 實現
  • Background processing mode:新增的後臺模式,可以持續幾分鐘高 CPU 佔用執行(指定充電期間執行,可以避免因 CPU 佔用過高被『殺死』)
  • 如何除錯後臺任務

如果你希望瞭解更多,移步全新後臺任務框架及最佳實踐有更詳細的介紹。

? Unused images and resources clean up in Xcode

@老峰:本文作者總結分享了以下三個清理專案無用資原始檔,清理 Xcode 無用快取檔案的開源工具:

  • FengNiao:作者是 @王巍(onevcat) , 是一款簡單的命令列工具可刪除專案無用的資原始檔。
  • LSUnusedResources:作者是 @tinymind,是一款圖形介面的 Mac 應用也是用來刪除專案無用的資原始檔。
  • DevCleaner:作者 @vashpan ,是一款圖形介面的 Mac 應用,可清理 Device Support、Archives、Derived Data下無用的快取檔案,磁碟緊張的同學可以試試。

Tips:FengNiaoLSUnusedResources 實現原理相似,都是遍歷資源目錄下字尾 ["imageset", "jpg", "png"...] 的檔案,然後在原始檔 ["m", "swift", "xib", "storyboard"...] 中字串匹配,無匹配則是無用的資原始檔。

? Generate & Host your iOS Documentation

@kyo:對於我們平時寫的一些專案工程程式碼,常常需要寫一些文件,否則不要說交接給別人,就是過幾個月,如果沒有文件,可能我們自己都不一定能完全理解。但是,隨著工程的迭代,文件也常常需要更新,這需要我們花費很多時間在裡面。而今天推薦的這款工具,可以幫我們自動的生成 iOS 文件,在文章中作者也簡單示範了下,還是很容易上手的,推薦經常需要寫文件的同學試一試。

? Formatter - NSHisper

@四娘:將資料轉化為人類可讀的文字格式是一個重要且複雜的任務,需要根據使用者的國家,語言,時區和貨幣等因素進行格式化,僅僅使用物件的 description 是遠遠不夠的,實際工作中我會用到一個存在於 Foundation 核心部分的型別 —— Formatter

本週 NSHisper 為我們介紹的就是 Formatter 這個重要的工具,文章裡為我們列舉介紹了 Apple 平臺上 DateFormatter / NumberFormatter 等等各種不同的 Formatter 以及它們對應的用途,對於這些格式化工具不熟悉的同學都可以看一下。

工具

? 免費又好用的 iOS UI 除錯軟體,Lookin 正式釋出

@Parsifal:Lookin 是微信讀書團隊出品的一款免費的 UI 除錯工具,功能像 Xcode 自帶的 UI Inspector 或者簡版的 Reveal。除支援檢視 UI 層級和檢視資訊外,還提供了方法監聽功能,算比較實用的一個特性。目前雖然不能與強大的 Reveal 比較,但作為一款免費的功能軟體,還是也比較推薦有相關需求的同學使用。

程式碼

DiffableDataSources

@享耳先森:Apple 在 WWDC 2019 新增了 UITableView/UICollectionViewDiffableDataSource,不過新 API 僅限 iOS 13,如需支援之前系統的話就用不了了,DiffableDataSources 基於 DifferenceKit 實現,提供了與官方近似的 API。

M80TableViewComponent

@anotheren:來自網易的 UITableView 的元件化解決方案,

  • 不用再和 IndexPath 及陣列越界打交道
  • 權責分離,和冗長的 UITableView Adapter 說再見
  • UITableViewCell 自動重用
  • 資料驅動的構建方式
  • 安全的模型檢視對映關係
  • 單向繫結
  • 靈活組裝
  • 自動高度快取和簡單的高度預計算支援
  • 支援 ListDiff

內推

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

如果你想找工作,點這裡:www.yuque.com/iosalliance…

如果你想招人,點這裡:www.yuque.com/iosalliance…

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

關注我們

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

老司機 iOS 週報 #77 | 2019-07-29

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

說明

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

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

相關文章