Ios'ta Uygulama Delegates ve Sahne Delegates'in Rolünü Anlayın
Table of Contents
iOS Geliştirmede Uygulama Delegates ve Sahne Delegates'in Rolünü Anlayın
iOS'un en eski versiyonlarından bu yana, geliştiricilerin kullanıcı arayüzünü nasıl ele aldığını anlaması gerekir. Apple, protokolü, iOS uygulama yaşam döngüsü yönetiminin arka kemiğidir. Ancak, iOS 13'teki çoklu-window desteğinin tanıtımı, geliştiricilerin kullanıcı arayüzünün nasıl çalıştığını temel olarak değiştirdi. Apple, iPhone'un hedeflediği gibi, iPad'leri veya Mac delegesinin her iki kapsamlı yaşam biçimini kullanarak araştırmalarını ve araştırmalarını nasıl etkin bir şekilde kullanarak gerçekleştirmeleri için gerekli hale getiriyor.
Bir App Delegate Nedir?
[FONT=0]App Delegate[[Dönetici:0) Uygulamanın tamamını etkileyen yüksek seviyeli uygulama olaylarının uygulanması, sonlandırma, uyarı, arka plan oluşturma ve uzaktan bildirim kaydıdır. App Delegate otomatik olarak sürecin sonuna kadar geçerlidir.
Core Lifecycle Methods
App Delegate, sistemin uygulama durumuna göre yanıt verdiği birkaç kritik yöntem tanımlamaktadır:
- [FONT:0]) Uygulama başlatıldıktan sonra çağrılmış.Bu, üçüncü taraf SDK'ları, yapılandıran temel veri yığınlarını, küresel görünümü ayarlamış ve uygulamayı geri yükleme durumu. ReturningurFLT:2).
- [FONT:0] - Uygulama aktif devletten inaktif geçişler sırasında iptal edildi.Bu, duraklama görevlerine, yenilemeye veya yeniden animasyonlara yeniden başlamayı kullanın.
- [FONT:0] - Uygulama aktif hale geldiğinde çağrılır (örneğin, gelen telefon görüşmesi, kullanıcı Lock düğmesine basın.) Kaydet state, stop oyunları ve kaynak kullanımını azaltır.
- [FONT:0] - Uygulama arka plana doğru hareket ettiğinde Sent.
- [FONT:0] - Uygulamanın arka plandan sonra sıraya geri dönmeden önce çağrılmış.
- [FONT:0] - Uygulama sona erince iptal edilir. kritik veriler ve sürüm kaynakları tasarruf edin. Not: Bu özellikle öldürülmediği sürece, arka plandaki uygulamalar için modern iOS versiyonlarına çağrılmıyor.
Ek Sorumluluklar
Yaşam döngüsü yönetiminin yanı sıra, App Delegate çeşitli uygulama çapında hizmetlerle ilgilidir:
- [FONT:0]Remote ve Local Bildirimler: Uzak bildirimler için kayıt: [[FONTT:9) ve gelen bildirimleri www.FLT:10 ile ele alalım.
- [FONT=0)Handling URLs ve Handoff: Uygulamanın özel URL programları ve Universal Links byFLT:11 aracılığıyla yanıt verdiği ve Handoff aktivitelerini www.D.D.T.D.D.T.C.D.T.D.T.D.T.D.D.D.T.D.D.D.D.T.D.T.D.T.D.T.D.D.T.D.) ile yöneteceği ve kontrol edilenler.
- [FONT:0)Memory Uyarıları:[Dönetici:[Dönetici:0)[Dönetici:0)[Dönetici:[Döncük Uyarılar:[Döncüler:[Döncüler: · 9) Uygulamanın önbellekleri, görüntüleri ve diğer tek kullanımlık kaynakları serbest bırakmasını sağlar.
- [[Düzzaman:0)Background Fetch:[Dönetici:[Dönetici:[Dönetici:[Dönetici:0) ImplementANSFLT:0) Uygulama arka plandayken içeriği periyodik olarak indirmek için.
- [[0) Connectivity ve App Grupları:[Dönetici:) Uygulama ve arkadaş İzle uygulaması ile App Delegate arasında paylaşılan verileri koordine eder.
Tarihsel Context
iOS 13, App Delegate, uygulamanın tek pencere örneğini yönetmekten sorumluydu. Geliştiriciler yalnızca uygulama çapındaki endişelere odaklanmak için ücretsiz olarak ayarladılar.Bu tasarım basit ama sınırlıydı - iOS 13'teki sahnelerin tanıtımı, App Delegate'i ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrılığa bırakmak için ücretsiz olarak hareket ettirildi.
Bir Sahne Delegate Nedir?
iOS 13 ve iPadOS 13, Apple, aİLFLT:0)UISceneDelegate) Uygulamada birden fazla pencereyi desteklemek için protokole sahip.Bir sahne, uygulamanızın kullanıcı arayüzünü temsil eder, genellikle bir sahnenin yaşam döngüsü, kullanıcı arayüzü ve etkileşimleri tarafından desteklenir.
Enabling Multi-Window Support
Sahneleri kullanmak için, uygulamanızın “Uygulama Sahne Manifest” anahtarı ile yapılandırın ve bu açıklığa sahip sahne konfigürasyonlarını tanımlar.Bu açık olmayan, iOS, uygulamanızı tek başına hareket ettirir ve bu işlem sırasındaki App Delegate pencere yönetimini kullanmaya devam eder.
Core Sahne Yaşamı Yöntemleri
Sahne Delegate, App Delegate'e analog yöntemler uygular, ancak bir sahneye kapılır:
- [FONT:0] – Yeni bir sahne uygulamaya eklendiğinde çağrılmış olun. Sahnenin kök görünümü kontrolörünü ve ilk UI'yi ayarlarsınız. URL'yi, aktiviteyi veya sahneyi tetikleyen kısayolları alıyorsunuz.
- [FONT:0] - Sahne aktif hale gelir (foreground ve odaklanma). Resume duraklama faaliyetleri, animasyonlar ve yeni veriler.
- [FONT:0] - Sahne aktif hale gelmek üzeredir (örneğin, çoklutasking j, app switcher). Save state and stop operations.
- [FONT:0] - Sahne arka plana taşınır, verileri kurtar ve bu sahne için arka plan görevleri planlamak.
- [FONT:0] - Sahne, ön planda aktif olmak üzeredir.
- [FONT:0] - Sistemden sahneyi uygulamadan kaldırdığında (örneğin, kullanıcı iPad'de bir pencereyi kapatır veya uygulama sahneyi bozmaya karar verir.
Sahne Seanları ve Roller
Her sahne, sahnenin ana uygulama arayüzü için olup olmadığını gösteren bir özelliktir () veya dış bir ekran ())) Sahne Delegate, davranışına adapte olmak için oturumun rolünü kontrol edebilir.
Sahne SwiftUI'de
SwiftUI uygulamaları için, Sahne Delegate genellikle yeni bir proje hedeflemeye başladığında otomatik olarak üretilir, ancak yine de bir adaptasyonla ilgili özel bir sahne oluşturabilirsiniz. ”dedi. mülkünüzü sarmalı. SwiftUI'sAHFLT:31).
App Delegate ve Sahne Arasında Anahtar Farklar
Her iki delege de yaşam döngüsünü yönetirken, kapsamı ve sorumlulukları önemli ölçüde farklıdır:
- [FONT:0)Scope: [DDDDÜDÜDÜDÜDÜDÜSÜSÜSÜSÜ: 0) Uygulama sürecinde faaliyet gösteren tek bir şey var. Sahne Delegate sahnede (veya pencere) seviye; aynı anda birden çok sahne delegesi var.
- [FONT:0)Introduction:[[Dönetici:[Dönder:) App Delegate, iOS 2 Sahne Delegate'in iOS 13'te çoklu-window desteği sağlamak için tanıtıldı.
- [FONT=0)Window Management:[Döneticiler içinde, App Delegate pencereye sahiptir. Sahne bazlı uygulamalar, her Sahne Delegate kendi sahnenin penceresine sahiptir.
- [FONT:0)State P Protection:[Döneticileri kullanarak uygulamalar sahne seviyesinde devlet koruma ve restorasyonu uygulamalıdır (TAFFT:34) veya [[DÜŞÜNCÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜye Olmayanlar, sadece App Delegate aracılığıyla değil.
- [FONT:0)Background Tasks:[Dönetici:[Dönetici:0) Genel olarak, arka plan görevleri uygulama çapında (In App Delegate) veya per-scene (via Sahne Delegate) tarafından yönetilebilir.
Modern App Bir Uygulamada Birlikte Nasıl Çalışılırlar
Sahneye dayalı iOS uygulamasında, App Delegate ve Sahne Delegate bir tabakalı mimari oluşturur. App Delegate ilkizes paylaşılan altyapıyı -logging, analitik, temel veritabanı -ve bu sahnedeki etkileşimleri idare eder.Sistemin yeni bir içerik göstermesi gerektiğinde, bir sahne yaratır ve sahne Delegate'i ilişkilendirir.
Koordinasyon sırasında
Bir kullanıcı uygulamayı açtığında, sistem App Delegate'in 03.30'u çağırır.Bu geri dönüşlerden sonra sistem sahne yaratır ve Sahne Delegate'de 9.00 $ 'a kadar yeniden açılır.Eğer uygulama Eloff veya bir kısayolla yeniden açılırsa, [[url|s|send|s.com|s.tr|s.com|s.
Devlet Restorasyon Across Sahneleri
Devlet restorasyonu, sahneyi yeniden inşa eden sahnelerin her pencerede yeniden düzenlenmesinden sorumlu olan aktivite türlerinden sorumludur.Bu koordinasyon, her pencerede bir belge uygulaması yeniden yapılandırılabilir.
Dış Ekranları Kullanın
iPad'de, bir sahne dış ekrandaki “AirPlay” veya “Sidecar” aracılığıyla oluşturulabilir ve sahnenin dış görünüşü ile uyumlu olması için UI'yi ayarlayabilir.The App Delegate, sahnenin hangi sorumluluklara göre ayrılmış olduğunu fark etmez.
Pratik Örnek: Sahneye Dayalı iOS App
Sahne Delegate ile boş bir Xcode projesinden başlayarak yeni bir UIKit uygulamasını sahne delegele yapılandırmak için adımlarla yürüyelim.
Adım 1: Info.plist Konsülasyon
Xcode automatically adds the “Application Scene Manifest” entry. Open the Info.plist and verify it contains a dictionary with:
- [[Düzücük:0)Enable Multi Windows[[[Dönetici: 1 ): EVET (çok pencerelere izin vermek istiyorsanız; aksi takdirde NO).
- [FONT=0]Scene Konsülleri[[Döneticileri)[[[Döneticileri) ve her bir sahne rolünü (örneğin, “Window Application”) ve bir delege sınıfı adı (örneğin, "PRODULE NAME).
Tek bir rüzgarlı uygulama için, birden fazla pencereden kaçabilirsiniz, ancak Sahne Delegate'i kullanmak için sahne konfigürasyonuna ihtiyacınız var.
2. Adım: Implement App Delegate
[FONTNT], herhangi bir pencere mülkünü kaldır. Bunun yerine, yalnızca uygulama çapında yöntemleri uygulayın:
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Configure analytics, core data, third-party SDKs
return true
}
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Return a scene configuration to use for the new scene
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {
// Called when the user discards a scene (e.g., closing a window)
}
}
3. Adım: Implement Sahne Delegate
[FONT: 54] Pencereyi ve sahne yaşam döngüsünü yönetin:
import UIKit
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
let window = UIWindow(windowScene: windowScene)
let viewController = ViewController()
window.rootViewController = viewController
self.window = window
window.makeKeyAndVisible()
}
func sceneDidDisconnect(_ scene: UIScene) {
// Called when the scene is being removed from the app
}
func sceneDidBecomeActive(_ scene: UIScene) {
// Resume tasks
}
func sceneWillResignActive(_ scene: UIScene) {
// Pause tasks
}
}
Adım 4: Sahne Bağlantı Seçenekleri
[[Affın: · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
if let urlContext = connectionOptions.urlContexts.first {
// Intialize a document viewer with the URL
urlContext.url.startAccessingSecurityScopedResource()
// Load document and set root view controller
}
Bu ayrılık, App Delegate'i ve her Sahne Delegate'i kendi penceresine yoğunlaştırır.
En İyi Uygulamalar ve Ortak Pitfalls
App Delegate vs. Sahne Delegate
- Uygulama başlatıcısı için uygulama başlatılması gereken ilkleme için App Delegate'i kullanın, örneğin kaza raporlaması, kullanıcı doğrulaması veya veritabanı göçü gibi.
- UI kurulumu için Sahne Delegate kullanın, görüntü kontrol cihazı anlık ve sahne özel devlet yönetimi.
- Dolunay:0)[Döneticileri değiştir], pencereyi almak için, aktif sahnenin delegesinden pencereyi almak için, [[Gruple|kullanıcısı) kullanmak, ancak açıkça sahneleri tercih etmek.
Miraç Uygulamalarından Migrating from Legacy Apps
Pencere yönetimi için App Delegate'i kullanan mevcut tek bir akış uygulamanız varsa, sahneyi açıklayarak sahneyi alabilir ve pencereyle ilgili kodu yeni bir Sahneye Delegate'e iletebilirsiniz.Test, özellikle uygulamanız iOS 13+'da ele alınacaktır.
Hafıza ve Performansı
Her sahne hafıza ve kaynakları tüketmektedir. iPad'de, sistem hafızanın düşük olduğu durumlarda sahneleri kesebilir. ImplementETHFLT:53'i sahneye özgü kaynaklar yayınlamaktan kaçının. Sahnede büyük önbellek veya veriler depolamaktan kaçının; Sahnede yer alan önbellekleri kullanın.
SwiftUI'de Delegates
SwiftUI'de, özel bir App Delegate'i pencereler üzerinden ekleyebilirsiniz; ancak sahne yönetimi için SwiftUI'nin 03:45'i otomatik olarak varsayılan sahne yapılandırmasını kullanırsınız.If you need the custom scene behavior (e.g., handle URL contexts per window), bir sınıf açın ve bunu açık veya sunak olarak atayabilir.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
App Delegate ve Sahne Delegate, modern iOS uygulama mimarisinin tamamlayıcı taşlarıdır. App Delegate, uygulama seviyesindeki olaylar için tek bir kontrol noktası sunarken, Sahne Delegates per-window yaşam döngüsü ve kullanıcı arayüzünü yönetirken, farklı sorumluluklarını ve nasıl işbirliği yaptığını anlayarak, çok fazla pencereleri, eyalet restorasyonunu ve tüm iOS cihazlarını ödüllendiren kullanıcı deneyimlerinizi sunar.