AppDelegate เป็น object จุดสูงสุดหรือ root ของแอพ ทำหน้าที่คอยบอกเหตุการณ์ว่าตอนนี้แอพกำลังอยู่ในเหตุการณ์ไหนโดยติดต่อกับระบบ iOS

เราจะใช้งานตัว AppDelegate ก็ต่อเมื่อ
- เราต้องการสร้าง object เพื่อใช้งานทั้งแอพ
- ต้องการเขียนโค้ดจัดการเมื่อเกิดเหตุการณ์ต่างๆ เช่น แบตเตอรี่ของเครื่องใกล้หมด, แจ้งเตือนเข้า, ram หมด เป็นต้น
- เขียนโค้ดที่เป็น core กลางของแอพ โดยไม่ขึ้นอยู่กับว่าผู้ใช้อยู่หน้าไหนของแอพ
- เขียนโค้ดเพื่อ register กับเซอวิสบางอย่างที่บังคับใช้ อย่างเช่นแจ้งเตือนของแอพเป็นต้น

เหตุการณ์

เมื่อเราต้องการทราบเหตุการณ์ใดๆ ที่เกิดขึ้นกับแอพ เราต้อง override method นั้นเพื่อใช้งาน

didFinishLaunchingWithOptions

เป็นเมธอดแรกสุดที่แอพถูกเปิดขึ้น เป็นการบอกว่าแอพเข้าสู่สถานะที่พร้อมใช้งานแล้ว โดยมีพารามีเตอร์ launchOptions ให้เราตรวจสอบได้ว่าแอพถูกเปิดด้วยวิธีไหน
- ไม่มีค่า แอพถูกเปิดโดยผู้ใช้แตะที่ไอคอนแอพ
- มีค่า ผู้ใช้เปิดใช้งานแอพผ่านแจ้งเตือนหรือเว็บไซต์

applicationWillResignActive

ทำงานเมื่อแอพเข้าสู่สถานะ InActive เข้าสู่สถานะนี้เมื่อแอพถูกขัดจังหวะโดย Alert, สายโทรเข้า,... อีกทั้งยังทำงานเมื่อผู้ใช้กำลังปิดแอพและแอพจะเข้าสู่สถานะ Active -> Inactive -> Background

💡
เมธอดนี้ทำงานในแอพโปรเจคที่ไม่ได้รองรับ SceneDelegate หากโปรเจคใช้ Scene จะทำงานในเมธอด sceneWillResignActive ของคลาส SceneDelegate แทน

ใช้เมธอดนี้เมื่อต้องจัดการเกี่ยวกับการหยุด tasks, disable timer, ปรับลดเฟรมเรทหรือหยุดเกมเมื่อแอพที่พัฒนาเป็นประเภทนี้, และทาง Apple ยังแนะนำให้จัดเก็บข้อมูลของหน้าในแอพที่ผู้ใช้งานกำลังใช้งานอยู่ก่อนที่แอพจะถูกปรับสถานะเป็น InActive

applicationDidBecomeActive

ทำงานเมื่อแอพถูกปรับมาเป็นสถานะ Active ผู้ใช้อาจจะไม่สนใจสายโทรเข้าหรือทำธุระเสร็จแล้ว

💡
เมธอดนี้ทำงานในแอพโปรเจคที่ไม่ได้รองรับ SceneDelegate หากโปรเจคใช้ Scene จะทำงานในเมธอด sceneDidBecomeActive ของคลาส SceneDelegate แทน

ใช้งานเมธอดนี้เพื่อคืนค่าหรือเริ่มต้นใหม่สำหรับ tasks, timers, resume game, คืนค่าหรือรีเฟรชหน้าใหม่

didReceiveRemoteNotification

ทำงานเมื่อมีแจ้งเตือนของแอพเข้ามา พารามีเตอร์ userInfo เป็นชนิด Dict ถูก iOS แปลงจาก JSON ของเซอวิสอัตโนมัติ บรรจุไปด้วยข้อมูลตัวเลขที่แสดงจำนวนแจ้งเตือนที่ไอคอนของแอพ, หัวข้อ, รายละเอียด หรือมีข้อมูลแล้วแต่ตามที่นักพัฒนาตกลงกันระหว่างหน้าบ้านและหลังบ้าน

💡
แจ้งเตือนของแอพหากเป็นประเภทแบบ Background จะไม่แสดงแจ้งเตือน แต่ iOS จะปลุกแอพจากสถานะ Suspended (ถูกปิดตัวอยู่) ให้เป็น Background เป็นระยะเวลา 30 วินาที ให้เราประมวลผลหรืออัพเดทข้อมูลภายในแอพแบบเล็กน้อย

หากเขียนโค้ดจัดการอะไรเสร็จแล้วเราต้องเรียก completionHandler เพื่อบอกให้ iOS ปรับเป็น Suspended

applicationDidReceiveMemoryWarning

Apple แนะนำให้จัดการโค้ดในส่วนนี้ถ้าเป็นไปได้ โดยเมื่อเกิดเหตุการณ์แจ้งเตือนพื้นที่ Ram เหลือน้อย ให้ทำการคืนค่าทรัพยากรณ์ภายในแอพให้มากที่สุด หากไม่จัดการตัว iOS จะบังคับปิดแอพหากใช้ Memory ที่สูงเกิน

เมธอดนี้สามารถ override ภายใต้คลาส UIViewController ได้อีกด้วย

applicationWillTerminate

ทำงานเมื่อแอพกำลังจะถูกปิดตัวลงและลบออกจาก Memory สิ่งที่ต้องทำในเมธอดนี้คือหยุดการทำงานของ Tasks, save ข้อมูลผู้ใช้, stop timer,...

แอพที่ไม่รองรับการทำงานในสถานะ Background เมธอดนี้จะถูกเรียกเสมอ แต่ถ้าหากรองรับจะไม่ถูกเรียก แต่มีบางกรณีที่ iOS จำเป็นต้องเรียกเมื่อหยุดการทำงานของแอพที่รองรับการทำงานใน Background

applicationDidEnterBackground

ทำงานเมื่อแอพอยู่ในสถานะ Background เรียบร้อยแล้ว

💡
เมธอดนี้ทำงานในแอพโปรเจคที่ไม่ได้รองรับ SceneDelegate หากโปรเจคใช้ Scene จะทำงานในเมธอด sceneDidEnterBackground ของคลาส SceneDelegate แทน

เมธอดอื่นๆ รวมถึงการใช้งานแบบเห็นภาพ ค่อยกล่าวถึงภายหลังตอนได้ใช้งานจริง