WWDC 第二天,為大家?guī)?lái) What's new in Swift 以及 What's new in Cocoa Touch 兩個(gè) 重要 Session 的精華內(nèi)容。
What's new in Swift
分兩個(gè)部分:Swift環(huán)境 和 Swift 語(yǔ)言改進(jìn)
Swift 環(huán)境
Xcode 9.4 搭載的是 Swift 4.1.2
Xcode 10 Beta 中大家可以嘗試 Swift 4.2
Swift 開(kāi)源社區(qū)討論轉(zhuǎn)到:forums.swift.org
Swift 二進(jìn)制兼容在 Swift 5 2019年早期實(shí)現(xiàn)
Swift 4.2 同時(shí)支持 Swift 3, Swift 4 和 Swift 4.2的代碼編譯。
Swift 4.2 是最后一個(gè)支持 Swift 3 兼容模式的版本,我們?nèi)コZ(yǔ)言和標(biāo)準(zhǔn)庫(kù)的警告要繼續(xù)進(jìn)行下去。
Swift 編譯更快了,這個(gè)我們?cè)?Xcode 9.3 中已經(jīng)有感受到了。
從Optimization Level,提取出 Compilation Mode(增量 vs Whole Module),這表明我之前實(shí)驗(yàn)的 SWIFT_WHOLE_MODULE_OPTIMIZATION 選項(xiàng)正式在Compilation Mode 中開(kāi)啟了,同時(shí)需要注意 Whole Module Compilation Mode 雖然速度變快了,但是對(duì)于內(nèi)聯(lián)函數(shù)和泛型調(diào)試的支持會(huì)變差。
9. 運(yùn)行時(shí)優(yōu)化:retain/release合并優(yōu)化,短字符串內(nèi)存和性能優(yōu)化
10. 代碼大小優(yōu)化可以考慮使用:Optimization Level:Optimize for Size。我覺(jué)得一般不會(huì)用,5%性能損失,節(jié)省10%到30%大小。
Swift 語(yǔ)言改進(jìn)
1. Swift 4.2 特性:聲明實(shí)現(xiàn) CaseIterable 自動(dòng)合成枚舉類(lèi)型靜態(tài)屬性 allCases
2. Swift 4.1 特性:Conditional Conformance [http://www.itdecent.cn/p/b6bc72bc5b98]
3. Swift 4.1 特性:合成的 Equatable 和 Hashable [http://www.itdecent.cn/p/2aa31c90abbd]
4. Swift 4.2 特性:func hash(into hasher: inout Hasher),每次Run都不一樣,更安全??梢酝ㄟ^(guò) Scheme 中的環(huán)境變量 SWIFT_DETERMINISTIC_HASHING=1來(lái)關(guān)閉
5. Swift 4.2 特性:隨機(jī)數(shù) API:Int.random(in: 0..< 10),greetings.randomElement(), greetings.shuffled(), RandomNumberGenerator
6. Swift 4.1 特性:條件編譯新功能:#if canImport(UIKit) #if hasTargetEnvironment(simulator)
7. Implicitly Unwrapped Optional 討論,更少的地方允許被使用。
8. Memory同時(shí)訪問(wèn)檢查(編譯期 & 運(yùn)行時(shí)),Exclusive Access to Memory 有選項(xiàng)可以選擇在什么Build開(kāi)啟。
What's new in Cocoa Touch
底層性能優(yōu)化
- 滾動(dòng)優(yōu)化:Prefetching 是個(gè)老API 用于預(yù)先生成Cell,iOS 12 有更聰明的實(shí)現(xiàn),錯(cuò)峰以避免CPU Peek。另外,iOS 12通過(guò)通用的底層優(yōu)化,來(lái)使?jié)L動(dòng)的處理盡量能趕上每一幀的時(shí)間。
- 內(nèi)存優(yōu)化:Automatic Backing Store 新特性。API 默認(rèn)自動(dòng)提供。例如灰度圖使用8位,而不是32位。
- Auto Layout性能提升:有相互約束關(guān)系的兄弟視圖以及嵌套關(guān)系視圖的 Auto Layout 的算法都從指數(shù)復(fù)雜度優(yōu)化為線性復(fù)雜度。
API微調(diào)
1.嵌套類(lèi)型:有從屬關(guān)系的獨(dú)立類(lèi)型,在新的API中,實(shí)現(xiàn)成嵌套關(guān)系:例如UIApplication和State
2.嵌套常量:常量們都找到了組織,以靜態(tài)常量屬性形式存在于某個(gè)類(lèi)中,來(lái)替換全局常量的形式。例如UIFloatRange.zero
3.嵌套函數(shù):全局函數(shù)->成員函數(shù)。例如image.pngData()
4.FromString系列函數(shù)的主體,都實(shí)現(xiàn)了Codable,同時(shí)都支持了Debug Printing。
例如:let encoded = JSONEncoder().encode(CGPoint(x:0, y:0)) 以及 print(CGPoint(x:0, y:0))
5.新的 NSSecureCoding API,提供默認(rèn)的安全行為。
新特性簡(jiǎn)介
1.Notification:分組、鎖屏設(shè)定
2.Messages:這個(gè)我們忽略吧,功能都很好,就差微信干掉Message了。
3.能夠?yàn)橛脩羯蓮?qiáng)密碼,存在Keychain。 驗(yàn)證碼自動(dòng)輸入,安卓機(jī)玩爛的功能。
4.Siri Shortcuts:NSUserActivity、SiriKit Intent、Custom Intent。
以上這些新特性,后續(xù)有Session詳解