UIKit vs SwiftUI: Alasan memilih UIKit untuk kecepatan startup
Halaman ini diterjemahkan secara otomatis dari bahasa Jepang. Baca versi asli berbahasa Jepang
1. Mengapa UIKit di 2026
Apple menekankan evolusi SwiftUI di WWDC tahunan, dan kenyamanan UI yang dinyatakan tidak lagi diragukan.
Namun, aplikasi ini memiliki persyaratan yang tidak menyerah. Ini adalah untuk membuat Time-to-Text (waktu dari startup hingga input teks) ke 500ms atau kurang.
Di SwiftUI, ada biaya overhead khusus kerangka kerja UI deklaratif, seperti inisialisasi @StateObject, evaluasi ulang body, dan kontrol waktu .onAppear. Ini dapat diabaikan dalam aplikasi umum, tetapi tidak dapat diabaikan dalam situasi di mana pengoptimalan dikejar dalam milidetik.
Di sisi lain, jalur yang memanggil becomeFirstResponder() dari viewDidAppear di UIKit cepat secara deterministik. Siklus hidup ViewController jelas, dan Anda dapat mengontrol secara akurat kapan keyboard ditampilkan.
2 Alasan untuk sepenuhnya menghilangkan Storyboard
Memilih UIKit saja tidak cukup. Storyboard juga memiliki overhead yang memengaruhi kinerja startup.
- Biaya analisis XML:Storyboard adalah file XML internal dan perlu diurai saat startup
- Biaya resolusi Segue:Dibutuhkan waktu untuk menyelesaikan pengaturan Segue untuk transisi layar
- Kompleksitas yang tidak perlu:Alat desain visual Storyboard berlebihan untuk aplikasi memo sederhana
, metode menghasilkan ViewController secara langsung dengan SceneDelegate diadopsi.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions) {
PerformanceLogger.shared.signpostBegin(name: "SceneConnect")
guard let windowScene = (scene as? UIWindowScene) else { return }
let window = UIWindow(windowScene: windowScene)
let composeVC = ComposeViewController()
let navController = UINavigationController(rootViewController: composeVC)
window.rootViewController = navController
window.makeKeyAndVisible()
PerformanceLogger.shared.signpostEnd(name: "SceneConnect")
}
Pendekatan ini mencapai Zero Persers Time for Storyboard dan Zero Segue resolution time. Dengan menghasilkan ComposeViewController langsung dari SceneDelegate, pemrosesan yang tidak perlu telah sepenuhnya dihilangkan dari jalur startup.
3. Garis pandang 1DidAppear melengkapi semuanya
Kekuatan terbesar UIKit adalah Siklus Hidup ViewController didefinisikan dengan jelas. Ketika viewDidAppear(_:) dipanggil, tampilannya ditampilkan sepenuhnya di layar. Dengan menelepon becomeFirstResponder() pada waktu tertentu ini, Anda dapat meminimalkan penundaan hingga tampilan papan ketik.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
activateTextInput()
}
private func activateTextInput() {
textView.becomeFirstResponder()
PerformanceLogger.shared.endTimeToText()
}
Pengukuran dilakukan dengan akurasi nanodetik oleh os_signpost. PerformanceLogger.shared.endTimeToText() mencatat peristiwa penghentian Signpost dan memungkinkan analisis terperinci dalam Instrumen.
4. Mekanisme pengukuran kinerja
Keputusan desain dibuat berdasarkan data kuantitatif daripada penilaian sensorik "cepat".
- PerformanceLogger:Pencatat khusus yang dibungkus dengan
os_signpost. Ukur setiap fase startup, transmisi, dan pembaruan UI - Kerja sama instrumen:Pelacakan akurasi nanodetik dimungkinkan dengan Instrumen os_signpost Xcode
- Metrik utama: Time-to-Text (mulai → input mungkin), Send-to-Reset (tombol kirim → inisialisasi UI)
- Pemantauan berkelanjutan: Lakukan pengukuran kinerja pada semua build yang sedang dikembangkan dan langsung mendeteksi regresi
Kinerja adalah sebuah fungsi. Bahkan jika pengguna tidak secara eksplisit membutuhkan "kecepatan", aplikasi lambat tidak akan digunakan secara tidak sadar. Itulah mengapa penting untuk terus mengelola kinerja secara numerik.
5. Apakah ada situasi di mana SwiftUI digunakan?
UIKit bukan satu-satunya pilihan. Ada beberapa situasi di aplikasi di mana SwiftUI cocok.
- Layar pengaturan:Pada layar non-kritis yang tidak memengaruhi kecepatan startup, UI deklaratif SwiftUI meningkatkan produktivitas
- Definisi jalur kritis:Mulai → Masukkan memo → Pertahankan alur inti pengiriman dengan UIKit
- Kompleksitas hibrida:Mencampur UIKit dan SwiftUI membutuhkan perhatian pada konsistensi manajemen UIHostingController dan aliran data
- Penilaian saat ini: UI dari aplikasi memo sederhana, dan lebih baik menyatukannya dengan UIKit layar penuh untuk menjaga konsistensi berbasis kode
Jika kinerja SwiftUI meningkat lebih jauh di masa depan, ada ruang untuk evaluasi ulang, tetapi jalur kritis UIKit akan dipertahankan untuk saat ini.
Pertanyaan umum
@StateObjectdanbody. Dalam pengembangan ini, yang bertujuan untuk tercepat, kami memilih UIKit, yang dapat mengontrol siklus hidup secara detail (bukan hasil pengukuran dan perbandingan keduanya dalam kondisi yang sama).os_signpostdan dianalisis di Instrumen.Referensi
- Pengembang Apple — Dokumentasi UIKit — Referensi resmi ke kerangka kerja yang digunakan untuk membangun UI SimpleMemo
- Pengembang Apple — Dokumentasi SwiftUI — Kerangka kerja UI deklaratif komparatif. Subjek pengukuran kinerja
- Pengembang Apple — os_signpost / OSSignposter — Pengukuran kinerja terkait instrumen API
- WWDC 2023 — Menganalisis hang dengan Instrumen — Sesi WWDC sebagai referensi untuk optimalisasi respons UI