UIKit vs SwiftUI: Başlangıç hızı için neden UIKit'i seçtim
Bu sayfa Japonca aslından makine çevirisiyle hazırlanmıştır. Japonca aslını okuyun
1 Neden 2026'de UIKit
Apple, SwiftUI'nin yıllık WWDC'deki evrimini vurguluyor ve ilan edilen UI'nin rahatlığı artık şüpheli değil.
Ancak, bu uygulamanın vermeyen gereksinimleri vardır. Metin Süresini (başlangıçtan metin girişine kadar olan süre) 500ms veya daha azına yapmaktır.
SwiftUI'de, @StateObject'in başlatılması, body'in yeniden değerlendirilmesi ve .onAppear'nin zamanlama kontrolü gibi bildirimsel UI çerçevesine özgü bir ek yük vardır. Bunlar genel uygulamalarda göz ardı edilebilir, ancak optimizasyonun milisaniyeler içinde takip edildiği durumlarda göz ardı edilemez.
Öte yandan, UIKit'in viewDidAppear'inden becomeFirstResponder()'i çağıran yol deterministik olarak hızlıdır. ViewController'ın yaşam döngüsü açıktır ve klavyenin ne zaman görüntüleneceğini doğru bir şekilde kontrol edebilirsiniz.
2 Storyboard'u tamamen ortadan kaldırmanın nedeni
Sadece UIKit'i seçmek yeterli değil. Storyboard ayrıca başlangıç performansını etkileyen ek yüke sahiptir.
- XML analiz maliyeti:Storyboard dahili bir XML dosyasıdır ve başlangıçta ayrıştırılması gerekir
- Segue çözünürlük maliyeti:Ekran geçişi için Segue ayarlarını çözmek zaman alır
- Gereksiz karmaşıklık: Storyboard'un görsel tasarım araçları basit not uygulamaları için aşırı
doğrudan SceneDelegate ile ViewController oluşturma yöntemini benimsedi.
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")
}
Bu yaklaşım Storyboard için sıfır Perth zamanı ve sıfır Segue çözüm süresi elde eder. ComposeViewController'ı doğrudan SceneDelegate'den oluşturarak, gereksiz işlem başlangıç yolundan tamamen ortadan kaldırılmıştır.
3. 1 viewDidAppear serisi her şeyi tamamlar
UIKit'in en büyük gücü, ViewController'ın Yaşam Döngüsünün açıkça tanımlanmasıdır. viewDidAppear(_:) çağrıldığında, görünüm ekranda tam olarak görüntülenir. Bu belirli zamanda becomeFirstResponder()'i arayarak, klavyenin görüntülenmesine kadar gecikmeyi en aza indirebilirsiniz.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
activateTextInput()
}
private func activateTextInput() {
textView.becomeFirstResponder()
PerformanceLogger.shared.endTimeToText()
}
Ölçümler os_signpost ile nanosaniye doğruluğu ile gerçekleştirilir. PerformanceLogger.shared.endTimeToText(), Signpost sonlandırma olayını kaydeder ve Instruments'ta ayrıntılı analiz sağlar.
4. Performans ölçüm mekanizması
Tasarım kararları, "hızlı" duyusal bir yargıdan ziyade nicel verilere dayanarak verilir.
- Performans Kaydedici:
os_signpostile sarılmış özel kaydedici. Başlangıç, iletim ve kullanıcı arayüzü güncellemesinin her aşamasını ölçün - Enstrüman işbirliği:Xcode'un os_signpost Instrument ile nanosaniye doğruluk izleme mümkündür
- Ana ölçümler: Metne Kadar Süre (başlangıç → giriş mümkün), Sıfırlamak için Gönder (gönder düğmesi → UI başlatma)
- Sürekli izleme:Geliştirilmekte olan tüm yapılarda performans ölçümleri yapın ve gerilemeyi anında tespit edin
Performans bir işlevdir. Kullanıcılar açıkça "hız" gerektirmese bile, yavaş uygulamalar bilinçsizce kullanılmayacaktır. Bu nedenle performansı sayısal olarak yönetmeye devam etmek önemlidir.
5. SwiftUI'nin kullanıldığı bir durum var mı?
UIKit tek seçenek değil. Uygulamada SwiftUI'nin uygun olduğu bazı durumlar var.
- Ayar ekranı: SwiftUI'nin bildirimsel kullanıcı arayüzü, başlangıç hızını etkilemeyen kritik olmayan ekranlarda üretkenliği artırır
- Kritik yolun tanımı:Başla → Notları girin → UIKit ile göndermenin temel akışını koruyun
- Hibrit karmaşıklık:UIKit ve SwiftUI'yi karıştırmak, UIHostingController yönetimi ve veri akışının tutarlılığına dikkat etmeyi gerektirir
- Şu anda yargı: Not uygulamasının kullanıcı arayüzü basittir ve kod tabanlı tutarlılığı korumak için tam ekran bir UIKit ile birleştirmek daha iyidir
SwiftUI'nin performansı gelecekte daha da iyileştirilirse, yeniden değerlendirmeye yer var, ancak kritik yol UIKit şimdilik korunacak.
Sık sorulan sorular
@StateObjectvebody'nın yeniden değerlendirilmesi için işlem eklenmiştir. En hızlıyı hedefleyen bu gelişmede, yaşam döngüsünü ayrıntılı olarak kontrol edebilen UIKit'i seçtik (ikisini aynı koşullar altında ölçmenin ve karşılaştırmanın sonucu değil).os_signpostile kaydedilir ve Instruments ile analiz edilir.Kaynaklar
- Apple Geliştirici — UIKit Belgeleri — SimpleMemo'in kullanıcı arayüzü yapısı için kullanılan çerçeveye resmi referans
- Apple Geliştirici — SwiftUI Belgeleri— Karşılaştırılmış bir bildirimsel kullanıcı arayüzü çerçevesi. Performans ölçümü konusu
- Apple Geliştirici — os_signpost / OSSignposter — Metne Zaman ölçümü için kullanılan enstrümanlar işbirliği performans ölçümü API
- WWDC 2023 - Analiz Instruments ile takılır — UI yanıt optimizasyonu için referans olarak WWDC oturumu