อะไรคือความแตกต่างระหว่างviewDidLoadและviewDidAppear? การกำหนดค่าเริ่มต้นหรือโค้ดที่กำหนดเองประเภทใดที่เข้าสู่ฟังก์ชันเหล่านั้น
เช่นpresentModalViewControllerทำงานเฉพาะเมื่ออยู่ในและไม่ได้อยู่ในviewDidAppearviewDidLoad
อะไรคือความแตกต่างระหว่างviewDidLoadและviewDidAppear? การกำหนดค่าเริ่มต้นหรือโค้ดที่กำหนดเองประเภทใดที่เข้าสู่ฟังก์ชันเหล่านั้น
เช่นpresentModalViewControllerทำงานเฉพาะเมื่ออยู่ในและไม่ได้อยู่ในviewDidAppearviewDidLoad
คำตอบ:
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จะเรียกอีกครั้ง