Table of Contents
הבנת תפקידם של עריכת סצנות וסצנות ב- iOS Development
מאז הגרסאות המוקדמות ביותר של iOS, ה-FLT:0 (UIApplicationDelegateFLT:1 פרוטוקול היה עמוד השדרה של ניהול חיי ה-iOS של iOS; עם זאת, הצגת תמיכה רב-window ב- iOS 13 שינתה באופן יסודי את האופן שבו מפתחים מטפלים בממשקי המשתמש.
מה זה App Delegate?
ה-FLT:0 [App Delegate] (FLT:1) הוא נקודת הכניסה והרכז המרכזי עבור יישום iOS.זה תואם לפרוטוקול FLT:0;0 והוא אחראי לטיפול באירועים של אפליקציה ברמה גבוהה המשפיעים על היישום כולו.אירועים אלה כוללים שיגור אפליקציה, סיום, אזהרות זיכרון, הסרת רקע, ורישום הודעה מרחוק.
שיטות מחזור חיים
האפליקציה Delegate מגדירה מספר שיטות קריטיות שהמערכת קוראת בתגובה לשינויים במצב האפליקציות:
- (FLT:0) ,FLT:1 ; קרא לאחר שה אפליקציה השיקה.This is where youize ראשי תיבות של צד שלישי SDKs, להגדיר מחסניות נתונים ליבה, להגדיר מראה עולמי, לשחזר את מצב היישום. ReturningFLT:2 מציין כי האפליקציה אינה יכולה להתמודד עם כתובת האתר או פעילות שגרם ההשקה.
- (ב) [ה]הבא [ה]: [ה]] [ה]] [ה]] [ה]]] [ה]]], כאשר האפליקציות עוברות מתוקף פעולה בלתי פעיל למדינה פעילה.
- (FLT:0) ;FLT:4ird) - נקרא כאשר האפליקציה עומדת להיות לא פעיל (למשל, שיחות טלפון נכנס, משתמשים ללחוץ על כפתור ההנעה, לעצור משחקים, להפחית את השימוש במשאב.
- (ב) ⁇ :0)5 ;5 ;5 ; ⁇ כאשר האפליקציה נעה ברקע. בצע ניקוי סופי, לשחרר משאבים משותפים, ולקבוע משימות רקע.
- (ב) ויקרא ה' (ב') לפני שהזמנה חוזרת לקדמת הבמה לאחר שהתבררה שינויים ב'לאנדו' (בפרק 7).
- (FLT:0) ,FLT:8irve) , invoked כאשר האפליקציה עומדת להיפסק.חסוך נתונים קריטיים ושחרור משאבים. Note: זה לא נקרא על גירסאות מודרניות של iOS עבור יישומים ברקע אלא אם כן נהרג במפורש.
אחריות נוספת
מלבד ניהול מחזור חיים, App Delegate מטפל מספר שירותים בכל רחבי יישומים:
- (ב) ויקרא י"ד: ויקרא י"ד: "וַיְּאֱמֶת הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא" (בראשית י"ד).
- (ב) [ה]ה'[דרוש מקור] [ה]'[דרוש מקור]'], [ה']'[דרוש מקור]']'[דרוש מקור]'], ו[ה'[דרוש מקור]' [ה']'[דרוש מקור]'[דרוש מקור]' [ה']
- (ב) ויקרא י"ד: "ה' י"א י"א י"א י"א י"א י"א י"א י"א י"א י"א י"א)
- (ב) ,0) , Background Fetchue:FLT 1 1 (החלים) 1:1 כדי להוריד תוכן מעת לעת, בעוד היישום נמצא ברקע.
- (FLT:0)Watch Connectivity ו- App Groups:FIRLT:1) שיתוף נתונים תואם בין אפליקציית iOS לבין אפליקציית Watch המלווה באמצעות App Delegate.
המונחים היסטוריים
לפני iOS 13, App Delegate היה גם אחראי על ניהול מקרה החלון הבודד של האפליקציה.מפתחים הציבו את בקר ראיית השורש בתוך FLT:15 [העיצוב הזה היה פשוט אך מגביל - זה לא יכול לתמוך במספר חלונות במקביל.המבוא של סצנות ב- iOS 13 עבר ניהול חלון כדי להפריד אובייקטים, מה שהשאיר את Applegate חופשי להתמקד באופן בלעדי בדאגות רחבות אפליקציה.
מה זה סצנה?
עם iOS 13 ו-iPadOS 13, אפל הציגה את ה-FLT:0UISceneDelegateFelogateFLT:1 פרוטוקול לתמיכה בחלונות מרובים ל- app. A סצינה מייצגת מקרה אחד של ממשק המשתמש של האפליקציה שלך, בדרך כלל מגובה על ידי אובייקט FLT:16 לכל סצנה יש מחזור חיים משלו, ניתן להציג על תצוגה נפרדת או בחלל נפרד על iPad.
תמיכה ב- Multi-Window
כדי להשתמש בסצנות, עליך לבחור בהגדרה על ידי הטמעת רכיבי ה-Application Scene Manifest (המפתח של ה-Application Scene Manifest) של היישום שלך, כולל שמות ייצוג ותפקידי ישיבות של נציג.ללא ביטוי זה, iOS מתייחס לאפליקציית כחלון יחיד-חלון וממשיך להשתמש בניהול חלון ההפלגייט של המורשת.
שיטות מחזור חיים
הסצנה Delegate מיישמת שיטות אנלוגיות ל- App Delegate אך היקפו לסצינה אחת:
- (ב) [ה]ב"ה:0 [ה]מקדש [ה] [ה]] [ה]] [ה'] [ה'] [ה']] [ה']]'[ה']']'[ה']'[ה']'[ה']'[ה']'[ה']'''']''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- (הופנה מהדף LT:0)FLT:20irve [ה]101] – הסצנה הופכת פעילה (מקדמה וממוקדת) למנוחה של פעילות, להתחיל באנימציה, ולרענן נתונים.
- [01:0]103]103 [ה]: הסצינה עומדת להיות לא פעילה (למשל, מחוות מרובות משימות, מתג יישומים להציל את המדינה ולהפסיק את פעולות.
- [01:0]1017:5] ⁇ [ה], [ה], [ה], הסצינה נעה אל הרקע.
- [01:0] ⁇ [ה] ב'[דרוש מקור]], [ה] הוא עומד להיות פעיל בקדמת הבמה.
- (הופנה מהדף 0 ;0)FLT:24irve [=1] , כאשר המערכת מסירת את הסצנה מהאפליקציית (למשל, המשתמש סוגר חלון על iPad, או האפליקציה נעה ברקע והמערכת מחליטה למחוק את הסצנה).
סצנות ותפקידים
כל סצנה קשורה לאובייקט של FLT:25 אשר נמשך על פני שיגורים. . Sessions ניתן להשתמש או ליצור מחדש.הפגישה מכילה נכס FLT:26 המציין אם הסצנה היא עבור ממשק היישום הראשי (FLT:27) או תצוגה חיצונית (FLT:28 ).
תמונה: SwiftUI
(האפליקציות SwiftUI, סצנות סצנות סטוד לעיתים קרובות מתועשות כאשר אתה מתחיל פרויקט חדש מיקוד iOS 14+.עם זאת, אתה יכול עדיין ליצור סצנות מותאמות אישית באמצעות עטוף רכוש FLT:29 בעגלת הרכוש שלך (FLT:30 מבנה.com) של SwiftUI.
הבדלים מרכזיים בין Applegate ו-Chris Delegate
בעוד שני הצירים מנהלים מחזור חיים, היקף ותחומי האחריות שלהם שונים באופן משמעותי:
- (FLT:0)Scope:cioFLT:1) The App Delegate פועל ברמת תהליך היישום; יש רק אחד ל- App.The Scene Delegate פועל ברמה של הסצנה (או החלון); ייתכן שיש לך מספר רב של צירים בסצינה פועל בו זמנית.
- (FLT:0) אינפורטדוקציה: 1FLT) App Delegate קיים מאז iOS 2.סצנות סטוד הוצגה ב- iOS 13 כדי לאפשר תמיכה רב-סגולה.
- (FLT:0)Window Management: 1 באפליקציות מורשת, App Delegate הבעלים של החלון.באפליקציות מבוססות סצינה, כל סצנה Delegate מחזיקה חלון הסצנה שלה.
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0) Background Tasksib: FLT:1 באופן כללי, משימות רקע ניתן להפעיל App-wide (באמצעות App Delegate) או per-scene (באמצעות סצנות סצנות) עם זאת, מצבי רקע מסוימים כמו מיקום עדיין מנוהלים על ידי App Delegate.
איך הם עובדים ביחד באפליקציית מודרנית
באפליקציית iOS מבוססת סצנה, App Delegate ו-Chlegate יוצרים ארכיטקטורה שכבתית.ה App Delegate מסמיך תשתיות משותפות - כניסה, ניתוח, מסד נתונים ליבה - ומטפלים באירועים שאינם שייכים לסצינה מסוימת.כאשר המערכת צריכה להציג תוכן חדש, היא יוצרת סצנה ומקשרת סצנה.
התיאום במהלך ההשקה
כאשר משתמש פותח את האפליקציה, המערכת קוראת ל- App Delegate's FLT:36 לאחר החזרה זו, המערכת יוצרת סצנה ומכנה FLT:37 על הסצינה Delegate.אם האפליקציה נפתחת מחדש באמצעות Handoff או קיצור דרך, ה-FLT:38 מספק את הפעילות הרלוונטית, כתובת האתר או פעילות המשתמש ל-Chle Delegate המתאים.
שיקום המדינה מעבר לסצנות
שיקום המדינה הוא חיוני עבור רב-משימות חלקה.כל סצנה צריכה לקודש את המדינה שלה באמצעות שורת:39 בשיטה של סצנות סצנות סצנות סצנות , לדוגמה, App Delegate אחראית על מתן סוגי פעילות באמצעות קונסולת 78 כאשר יצירת מפגש סצנה. תיאום זה מבטיח כי פתח מחדש סצנות לשחזר את התוכן שלהם - לדוגמה, אפליקציה מסמך יכול לפתוח מחדש את הקובץ המדויק היה לערוך בכל חלון.
עקבו אחרי Out Displays
ב-iPad, ניתן ליצור סצנה על צג חיצוני באמצעות "AirPlay" או "Sidecar" על ידי בדיקת התפקיד FLT:42, סצנות Delegate יכולות להתאים את UI כדי להתאים את ההחלטה ואת היכולות של התצוגה החיצונית.
דוגמא מעשית: הגדרת אפליקציית iOS מבוססת סצנות
בואו נלך דרך השלבים כדי להגדיר אפליקציה חדשה של UIKit עם צירים סצנות.אסיום שאתה מתחיל מפרויקט Xcode ריק עם האפשרות "Use Scene Delegate" אפשרה.
שלב 1: מידע.plist Configuration
Xcode automatically adds the “Application Scene Manifest” entry. Open the Info.plist and verify it contains a dictionary with:
- (ב) ,0) מספר רב של חלונותFLT:1: כן (אם אתה רוצה לאפשר חלונות מרובים; אחרת לא).
- (FLT:0)Scene Configurations: A מערך של דיונות, כל אחד מהם מגדיר תפקיד סצנה (למשל, "Wondow Application") ו שם ייצוגי (למשל, "$(PRODUCT MODULE NAME).
עבור אפליקציה בודדת, אתה יכול להשאיר מספר חלונות מוגבלים, אבל אתה עדיין צריך את תצורה הסצנה כדי להשתמש ב-Chris Delegate.
שלב 2: יישום יישום
ב-[[1943]], הוציאו את כל רכוש החלונות.
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: מיפוי סצנות דחק
ב-[[1924]], ניהל את החלון ואת מחזור החיים של הסצינה:
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
}
}
שלב 4: אפשרויות חיבור סצנה
ה-FLT:47 (FLT:48) מספק קיצורי דרך, חיבורי כתובת URL ופעילויות משתמש.לדוגמה, לפתוח מסמך ספציפי כאשר המשתמש משתמש בקובץ:
if let urlContext = connectionOptions.urlContexts.first {
// Intialize a document viewer with the URL
urlContext.url.startAccessingSecurityScopedResource()
// Load document and set root view controller
}
הפרדה זו שומרת על התוספת של טהגייט רזה וכל סצנה דלטה התמקדה בחלון שלה.
ההליכים הטובים ביותר והמלכודות הנפוצות
מתי להשתמש App Delegate לעומת סצנות Delegate
- השתמש ב- App Delegate עבור ה-iOS כי חייב לקרות בדיוק פעם אחת לשיגור אפליקציה, כגון דיווח על התרסקות, אימות משתמש או הגירה מסד נתונים.
- השתמש ב-Chcelegate עבור ההתקנה UI, להציג את ה- מיידית של בקר, וניהול המדינה הספציפי של סצינה.
- [ה]ה' [ה'] ב'[[1924]], [[1924]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]
עקבו אחרי Legacy Apps
אם יש לך אפליקציה הקיימת יחיד-חלון המשתמשת ב- App Delegate עבור ניהול חלונות, אתה יכול לאמץ סצנות על ידי הוספת סצינה התגלות ו העברת קוד הקשור לחלון חדש סטיפטה.
זיכרון ושיקולי ביצועים
כל סצנה צורכת זיכרון ומשאבים. על iPad, המערכת עשויה לנתק סצינות כאשר הזיכרון נמוך.יישום (FLT:53) כדי לשחרר משאבים ספציפיים לזירה.הימנע מאחסן צ'יפים גדולים או נתונים בסצנות הבמה; להשתמש בנספח ל calegate עבור כיבים רחבים של יישומים שיכולים לשרוד ניתוק סצנה.
עקבו אחרי SwiftUI
ב- SwiftUI, באפשרותך לצרף אפליקציה אישית באמצעות ניהול סצנות (FLT:54 עם זאת, עבור ניהול סצנה, SwiftUI's FLT:55:55 באופן אוטומטי להשתמש בתצורה של ברירת המחדל.אם אתה צריך התנהגות סצנות סצנות מותאמות אישית (למשל, טיפול ב-URL לחלון), ליצור מחלקה התואם ל-FLT:56 ולהקצות אותו במניפסט באמצעות המדגם או באמצעות מנטרול.
מסקנה
(הופנה מהדף ה-iOS) , App Delegate מספק נקודה אחת של שליטה לאירועים ברמת היישום, בעוד סצנות סצנות לנהל מחזור חיים של שיער וממשק משתמש. על ידי הבנת האחריות הייחודית שלהם וכיצד הם משתפים פעולה, תוכל לבנות יישומים התומכים בחלונות מרובים, שיקום המדינה, וחוויות משתמשים רציונאליות בכל המכשירים של iOS for, Addd: FLT5: DIFgate: 1.R5: