Marcus’ Blog

馬克斯的碎念與筆記

Category: iOS 開發 (page 1 of 7)

優雅的使用Swift 與Storyboard

最近剛到新公司,這裡的專案大量的使用Storyboard,在前公司時,因為多人協作的關係,並沒有使用Storyboard 在進行開發,因此,結合了一些已閱讀過的觀念,順便來實作看看。

原本的問題

原本使用Storyboard 要拿到一個viewController 的instance 時,需要像這樣:

func foo() {
    let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
    let initViewController = storyboard.instantiateInitialViewController()
    let viewController = storyboard.instantiateViewController(withIdentifier: "AnIdentifierForViewController") as! ViewController
    // Do something...
}

這邊有幾個缺點:

  • Storyboard 與ViewController 的Identifier 都是字串,重複使用時容易typo,對開發來說造成許多變因,以經驗上來說挺危險的
  • 使用了as! 來做downcast,但不使用強制轉型又顯得哆嗦

Continue reading

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

Older posts

© 2021 Marcus’ Blog

Theme by Anders NorenUp ↑