Marcus’ Blog

馬克斯的碎念與筆記

Month: 6 月 2018

What’s New in Swift – Session 401

Swift 4.2

Runtime Optimizations

Swift 透過ARC 來做記憶體管理,在4.1 以前,Compiler 自動幫我們在該retain、release 的地方加上code(跟Objc 相同)

class X { ... }

func caller() {
    // x 被created 之後,+1 reference count
    let x = X()
    foo(x)
}

func foo(x: X) {
    let y = x.value
    ...

    // 用完x之後,release x
}

Continue reading

WWDC18

往年看完WWDC,都沒有特別做些筆記,大多數的議程都是碰到技術相關需要才去讀,今年特地把看過的議程做些筆記,也希望可以加強自己的英聽🤣,不過也由於是筆記形式的紀錄,內容不保證完全正確,甚至有些因為經驗不足可能聽不太懂🙇‍♂️(例如比較進階的Swift generic 用法之類的),未來若有碰到我應該也會再查資料往回填,望請其他大神指教。

以下是目前為止看完的議程,將會持續更新:

Swift

Framework

High Performance Auto Layout – Session 220

無標題

iOS 12 improvement

在開頭(2:25),Apple 直接使用3rd party benchmark 來展現iOS 11 與iOS 12 的Auto layout performance 差異,這真是一個大膽又令所有工程師們有共鳴的方式 🤣

無標題

Continue reading

What’s New in Cocoa Touch – Session 202

Framework updates

Performance update

Scrolling

在一個cellForRow() 裡面,主要會做Dequeue 與config cell 這兩個動作,config cell 所消耗的時間完全取決於App 對於該List 設計的複雜度而決定,在進行玩這兩個動作,系統會對UITableViewCell 內的UIView 進行layoutSubview()draw() ,這些動作通通必須在16 ms 內做完,如果是在120 Hz 的裝置(如iPad Pro),你就只剩下8 ms,否則就得掉Frame。

Config cell 內,若有一些資料準備的事情,則可透過prefetch API 來進行效能改善,但必須注意的是Prefetch API 並不支援所有版本iOS。(如果用IGListKit 就更方便了,我們有Display delegate 跟Working range)

大致上的改動在於,UIKit 如何排程使得CPU 在prefetch 時,可以更加的有效率,在以前的版本,儘管是prefetch,他與cellForRow() 可以說是在同一個時間點做,CPU 的loading 並不會因此而降低,所以掉Frame 的狀況還是會發生。

Continue reading

© 2021 Marcus’ Blog

Theme by Anders NorenUp ↑