อะไรคือความแตกต่างระหว่างviewDidLoad
และviewDidAppear
? การกำหนดค่าเริ่มต้นหรือโค้ดที่กำหนดเองประเภทใดที่เข้าสู่ฟังก์ชันเหล่านั้น
เช่นpresentModalViewController
ทำงานเฉพาะเมื่ออยู่ในและไม่ได้อยู่ในviewDidAppear
viewDidLoad
อะไรคือความแตกต่างระหว่างviewDidLoad
และviewDidAppear
? การกำหนดค่าเริ่มต้นหรือโค้ดที่กำหนดเองประเภทใดที่เข้าสู่ฟังก์ชันเหล่านั้น
เช่นpresentModalViewController
ทำงานเฉพาะเมื่ออยู่ในและไม่ได้อยู่ในviewDidAppear
viewDidLoad
คำตอบ:
viewDidLoad
เรียกว่าครั้งเดียวเมื่อตัวควบคุมมุมมองถูกโหลดลงในหน่วยความจำครั้งแรก นี่คือที่ที่คุณต้องการสร้างอินสแตนซ์ตัวแปรอินสแตนซ์และสร้างมุมมองใด ๆ ที่ใช้งานได้ตลอดวงจรชีวิตของตัวควบคุมมุมมองนี้ อย่างไรก็ตามจุดนี้มักจะยังมองไม่เห็นมุมมอง
viewDidAppear
ถูกเรียกเมื่อมุมมองนั้นสามารถมองเห็นได้จริงและสามารถเรียกได้หลายครั้งในช่วงอายุการใช้งานของ View Controller (ตัวอย่างเช่นเมื่อปิด Modal View Controller และมุมมองจะปรากฏขึ้นอีกครั้ง) นี่คือที่ที่คุณต้องการดำเนินการจัดวางหรือวาดรูปใด ๆ ใน UI ตัวอย่างเช่นการนำเสนอตัวควบคุมมุมมองโมดอล อย่างไรก็ตามสิ่งที่คุณทำที่นี่ควรทำซ้ำได้ ที่ดีที่สุดคืออย่าเก็บสิ่งต่างๆไว้ที่นี่มิฉะนั้นคุณจะได้รับความทรงจำรั่วไหลหากคุณไม่ปล่อยสิ่งเหล่านี้เมื่อมุมมองหายไป
ดู: https://developer.apple.com/documentation/uikit/uiviewcontroller
viewDidLoad
โดยทั่วไปมักเรียกเพียงครั้งเดียวและครั้งเดียวมีสถานการณ์หนึ่งที่อาจเรียกได้อีกครั้ง โดยเฉพาะอย่างยิ่งหากคุณเคยได้รับdidReceiveMemoryWarning
มุมมองที่มองไม่เห็นของคุณอาจถูกปล่อยออกมา (แม้ว่าตัวควบคุมมุมมองจะไม่ถูกแตะต้อง) และเมื่อคุณกลับมาviewDidLoad
อาจถูกเรียกให้กลับมาอีกครั้ง
didReceiveMemoryWarning
. แต่ฉันยอมรับว่าหากคุณใช้แนวทางปฏิบัติที่ดีในการเขียนหนังสือของviewDidLoad
คุณคุณก็จะสบายดี ประเด็นเดียวของฉันคือการใช้ ivars และการจัดการหน่วยความจำแบบแมนนวลอย่างเลอะเทอะอาจทำให้เกิดการรั่วไหลในviewDidLoad
ไฟล์. ผู้คนควรมีความอ่อนไหวต่อdidReceiveMemoryWarning
สถานการณ์และโปรแกรมตามนั้น
พูดง่ายๆก็คือคุณต้องการสร้างคอนโทรลหรืออาร์เรย์ใด ๆviewDidLoad
ในviewDidAppear
ที่ที่คุณต้องการรีเฟรชคอนโทรลหรืออาร์เรย์เหล่านั้น
viewDidLoad
ถูกเรียกหนึ่งครั้งเมื่อมีการสร้างคอนโทรลเลอร์และviewDidAppear
ถูกเรียกทุกครั้งที่มีการดู DID จะปรากฏขึ้น สมมติว่าคุณมีมุมมองแบบโมดอลที่คุณนำเสนอเมื่อมุมมองนั้นถูกปิดviewDidAppear
จะถูกเรียกและviewDidLoad
จะไม่ถูกเรียก
viewDidLoad
อาจจะเรียกว่ามากกว่าหนึ่งครั้ง หากมุมมองของคุณในขณะที่ไม่แสดง (ภายใต้สแต็กของมุมมองอื่น ๆ ) ถูกยกเลิกการโหลดโดย iOS เวอร์ชันเก่าในสถานการณ์หน่วยความจำเหลือน้อยตัวควบคุมมุมมองจะโหลดมุมมองใหม่โดยอัตโนมัติเมื่อจำเป็นต้องแสดงใหม่บนหน้าจอ ใน iOS เวอร์ชันที่ใหม่กว่าคุณอาจเลือกที่จะช่วยลดการใช้หน่วยความจำโดยทำสิ่งที่ iOS รุ่นก่อนหน้าทำเพื่อคุณ: ยกเลิกการโหลดมุมมองนอกหน้าจอเมื่อdidReceiveMemoryWarning
ข้อความมาถึงซึ่งในกรณีนี้ระบบviewDidLoad
จะเรียกอีกครั้ง