AppDelegate เป็น object จุดสูงสุดหรือ root ของแอพ ทำหน้าที่คอยบอกเหตุการณ์ว่าตอนนี้แอพกำลังอยู่ในเหตุการณ์ไหนโดยติดต่อกับระบบ iOS
เราจะใช้งานตัว AppDelegate ก็ต่อเมื่อ
- เราต้องการสร้าง object เพื่อใช้งานทั้งแอพ
- ต้องการเขียนโค้ดจัดการเมื่อเกิดเหตุการณ์ต่างๆ เช่น แบตเตอรี่ของเครื่องใกล้หมด, แจ้งเตือนเข้า, ram หมด เป็นต้น
- เขียนโค้ดที่เป็น core กลางของแอพ โดยไม่ขึ้นอยู่กับว่าผู้ใช้อยู่หน้าไหนของแอพ
- เขียนโค้ดเพื่อ register กับเซอวิสบางอย่างที่บังคับใช้ อย่างเช่นแจ้งเตือนของแอพเป็นต้น
เหตุการณ์
เมื่อเราต้องการทราบเหตุการณ์ใดๆ ที่เกิดขึ้นกับแอพ เราต้อง override method นั้นเพื่อใช้งาน
didFinishLaunchingWithOptions
เป็นเมธอดแรกสุดที่แอพถูกเปิดขึ้น เป็นการบอกว่าแอพเข้าสู่สถานะที่พร้อมใช้งานแล้ว โดยมีพารามีเตอร์ launchOptions ให้เราตรวจสอบได้ว่าแอพถูกเปิดด้วยวิธีไหน
- ไม่มีค่า แอพถูกเปิดโดยผู้ใช้แตะที่ไอคอนแอพ
- มีค่า ผู้ใช้เปิดใช้งานแอพผ่านแจ้งเตือนหรือเว็บไซต์
applicationWillResignActive
ทำงานเมื่อแอพเข้าสู่สถานะ InActive เข้าสู่สถานะนี้เมื่อแอพถูกขัดจังหวะโดย Alert, สายโทรเข้า,... อีกทั้งยังทำงานเมื่อผู้ใช้กำลังปิดแอพและแอพจะเข้าสู่สถานะ Active -> Inactive -> Background
ใช้เมธอดนี้เมื่อต้องจัดการเกี่ยวกับการหยุด tasks, disable timer, ปรับลดเฟรมเรทหรือหยุดเกมเมื่อแอพที่พัฒนาเป็นประเภทนี้, และทาง Apple ยังแนะนำให้จัดเก็บข้อมูลของหน้าในแอพที่ผู้ใช้งานกำลังใช้งานอยู่ก่อนที่แอพจะถูกปรับสถานะเป็น InActive
applicationDidBecomeActive
ทำงานเมื่อแอพถูกปรับมาเป็นสถานะ Active ผู้ใช้อาจจะไม่สนใจสายโทรเข้าหรือทำธุระเสร็จแล้ว
ใช้งานเมธอดนี้เพื่อคืนค่าหรือเริ่มต้นใหม่สำหรับ tasks, timers, resume game, คืนค่าหรือรีเฟรชหน้าใหม่
didReceiveRemoteNotification
ทำงานเมื่อมีแจ้งเตือนของแอพเข้ามา พารามีเตอร์ userInfo เป็นชนิด Dict ถูก iOS แปลงจาก JSON ของเซอวิสอัตโนมัติ บรรจุไปด้วยข้อมูลตัวเลขที่แสดงจำนวนแจ้งเตือนที่ไอคอนของแอพ, หัวข้อ, รายละเอียด หรือมีข้อมูลแล้วแต่ตามที่นักพัฒนาตกลงกันระหว่างหน้าบ้านและหลังบ้าน
หากเขียนโค้ดจัดการอะไรเสร็จแล้วเราต้องเรียก completionHandler เพื่อบอกให้ iOS ปรับเป็น Suspended
applicationDidReceiveMemoryWarning
Apple แนะนำให้จัดการโค้ดในส่วนนี้ถ้าเป็นไปได้ โดยเมื่อเกิดเหตุการณ์แจ้งเตือนพื้นที่ Ram เหลือน้อย ให้ทำการคืนค่าทรัพยากรณ์ภายในแอพให้มากที่สุด หากไม่จัดการตัว iOS จะบังคับปิดแอพหากใช้ Memory ที่สูงเกิน
เมธอดนี้สามารถ override ภายใต้คลาส UIViewController ได้อีกด้วย
applicationWillTerminate
ทำงานเมื่อแอพกำลังจะถูกปิดตัวลงและลบออกจาก Memory สิ่งที่ต้องทำในเมธอดนี้คือหยุดการทำงานของ Tasks, save ข้อมูลผู้ใช้, stop timer,...
แอพที่ไม่รองรับการทำงานในสถานะ Background เมธอดนี้จะถูกเรียกเสมอ แต่ถ้าหากรองรับจะไม่ถูกเรียก แต่มีบางกรณีที่ iOS จำเป็นต้องเรียกเมื่อหยุดการทำงานของแอพที่รองรับการทำงานใน Background
applicationDidEnterBackground
ทำงานเมื่อแอพอยู่ในสถานะ Background เรียบร้อยแล้ว
เมธอดอื่นๆ รวมถึงการใช้งานแบบเห็นภาพ ค่อยกล่าวถึงภายหลังตอนได้ใช้งานจริง
Discussion