老司機 iOS 週報,只為你呈現有價值的資訊。
你也可以為這個專案出一份力,如果發現有價值的資訊、文章、工具等可以到 Issues 裡提給我們,我們會盡快處理。記得寫上推薦的理由哦。有建議和意見也歡迎到 Issues 提出。
文章
? Easier Scrolling With Layout Guides
iOS 11 為 UIScrollview
增加了新的 layout guide:frameLayoutGuide
、contentLayoutGuide
,目的在於讓 scroll view 的 constraints 設定變得更加直觀,這篇文章會為你實際展示如何使用它們。
? Model controllers in Swift
如何封裝 Model 相關的邏輯是保持程式碼高可維護性的關鍵之一,通常來說,設計優良的型別定義通常奠定了一個好架構的基礎。作者介紹瞭如何通過建立一個 ModelController 類,將 Model 層相關邏輯封裝其中,只暴露需要外界瞭解的一部分介面,相信會給大家一些啟發。
? Atomic Properties in Swift
Swift 語言沒有定義原子屬性的功能,但 atomic 內部也是通過自旋鎖保證的 set、get 方法的原子性,Swift 中我們也能使用鎖來實現屬性的原子性,除了鎖,使用佇列也能達到同樣的效果。
? Swift Property Observers
文章詳細介紹了 Swift 中的屬性觀察器,並通過兩個例子來深入淺出地說明屬性觀察器適用的場景。如果你剛入門 Swift ,值得一讀。
? Hook 所有 +load
方法(包括 Category) 和 Hook static initializers
在做 App 啟動時間的深度效能優化時,我們會對 pre-main 階段的耗時進行統計(如需更系統瞭解這部分,可參考 29 期週報中推薦的『App 啟動時間優化』一文),其中統計所有 +load
方法以及 static initializers
的耗時就是很重要的一部分。everettjf 的這兩篇文章分別闡述瞭如何進行這類耗時的統計。
? Examples of NSPredicate usage
NSPredicate (謂詞)類是用來定義邏輯條件約束的獲取或記憶體中的過濾搜尋。可以使用謂詞來表示邏輯條件,用於描述物件永續性儲存在記憶體中的物件過濾。作者詳細的列出了 NSPredicate 的各種使用示例。是 NSPredicate 使用者的不錯參考文章。
? ?The difference between Flux and Redux
使用 React 或者 ReactNative 的朋友們在開發中都接觸過元件與元件之間的狀態管理與資料傳遞。傳統的通過 props 層層傳遞,在面對元件複雜互相巢狀等情況下就顯得開發困難不利於維護。因此產生了狀態管理的工具 Flux 後續又發展出來了 Redux。這篇文章就詳細的為我們介紹了 Flux 與 Redux 的一些設計上的區別。
? Let's Talk Architecture
iOS 的應用架構實際上是一個老生常談的問題。相比於各種打太極的文章,本文從 iOS 應用架構的前世今生,詳細講解了 MVC、MVVM、MVP 在 iOS 上的使用以及他們各自的優缺點。並將 MVC 劃分為過去,將 MVVM 和 MVP 劃分為現在,而至於未來,作者也給出了自己的答案,函數語言程式設計。當然,筆者認為,我們在真正開發中,具體要選擇哪種架構最好還是要切合團隊專案的實際情況。就像作者在文章末尾也有提到,這些框架都可以幫助我們實現相同的目標,也就是編寫優秀的軟體。
? [譯]構建流暢的互動介面
今年 iOS 花了很大的功夫在優化系統基礎體驗上,甚至在 WWDC 裡專門開一個 session 來講如何構建流暢的人機互動。這篇文章的作者在看了這個 session 之後有感而發寫了這篇文章,在介紹和總結 session 內容的同時,還動手通過程式碼實現了那些 Design Tips,裡面特定互動的最佳實現和動畫實現的思路都非常棒,推薦一看。
31 期裡提到的文章構建流暢的人機互動
通過掘金計劃進行了翻譯,如果是因為英文而錯過了這篇文章的朋友,這次可以毫無負擔地進行閱讀了。
工具
統計 CocoaPod 元件大小的工具集
這是一款用來計算把 CocoaPod 庫打成二進位制後的大小的工具。實現思路很簡單,就是搞兩個一樣的殼工程,把其中一個通過 pod 安裝好類庫,再 archive 兩個工程,最後計算差值。這種測量方式通常會在持續整合平臺上用來自動計算每次發版包大小的變化。從文件描述中得知,實際安裝大小會比使用該工具計算的大小多 3% 左右。試用下來的體驗還是不錯的,但也有很大的改進空間。還沒有開始做安裝包或 SDK 大小變化統計的同學可以開始搞起來了。
程式碼
Schedule
Schedule 是一個輕量級的定時任務框架,提供了許多友好語法供開發者執行定時任務。 我們可以從下面這行程式碼一窺這個庫的用法。
Schedule.every(.monday, .tuesday).at("9:00:00").do { }
複製程式碼
DifferenceKit
繼上次推薦的 DeepDiff 之後,又一個計算兩個列表的 Diff 差異的庫,目前 iOS 大部分 Diff 庫的靈感都來自於 IGListKit,因為 IGListKit 採用了一個 O(n) 的演算法來尋找兩個列表的不同,相比較於 DeepDiff 的動態規劃尋找最短路徑演算法,有明顯的效能提升。DifferenceKit 最值得推薦的一點就是 API 相比較而言更為豐富。但是,相比較於使用,我更推薦大家看一下原始碼或者學習一下這些 Diff 庫的實現演算法 Paul Heckel's Diff Algorithm 。
Validated
Validated 是一個同時處理多重錯誤的庫,用於簡化需要多次驗證資料正確性的程式碼。
Validated 框架融合了之前一些已有的概念,例如 Result 。
我們也可以從以下幾個樣例程式碼中一探究竟:
let user = try validateUser(id: 1, email: "blob@pointfree.co", name: "")
// throws Invalid.error("name can't be blank")
func validate(id: Int) -> Validated<Int, String> {
return id > 0
? .valid(id)
: .error("id must be greater than zero")
}
let validInputs = zip(
validate(id: 1),
validate(email: "blob@pointfree.co"),
validate(name: "Blob")
)
// Validated<(Int, String, String), String>
zip(with: User.init)(
validate(id: -1),
validate(email: "blobpointfree.co"),
validate(name: "")
)
// invalid([
// "id must be greater than zero",
// "email must be valid",
// "name can't be blank"
// ])
複製程式碼
內推
-
上海犬島資訊科技有限公司招聘 iOS 開發: 負責「一罐」App的日常開發工作,需要熟悉 Swift。是一隻極其少見的優質創業團隊,特別適合喜歡創業氛圍的小夥伴。專案負責人是純銀,做過「蟬遊記」、「貓餅」等優秀的產品。感興趣的把簡歷直接發給 firecicada@gmail.com。另外,這個專案是一個從零開始的 IM 專案,所以熟悉 IM 的小夥伴優先。
-
北京-螞蟻金服 招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@bytedance.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)