Don't forget Weak in Delegation Pattern

ผมเห็นโค้ดหลายคน และโค้ดผมเอง เมื่อหลายเดือนก่อนที่เริ่มเอา Swift เข้ามาใช้อย่างจริงจังในออฟฟิศ พบว่า Memory Leak กระจายเลยครับ... ดีนะ ที่รู้ตัวทันก่อนจะส่งมอบโค้ดชุดนั้นให้ลูกค้าไป


Delegation Pattern เป็นสิ่งที่เราใช้กันหลายจุด ใน iOS Development ในสมัยของการเขียน Objective-C ตามหลักการของ ARC นั้น เราควรประกาศตัวแปร delegate ใน class ที่ต้องการรับความช่วยเหลือเมื่อถึงเวลาใดๆ เป็น weak เนื่องจากปัญหา Retain Cycle ส่วนเกิดได้อย่างไร นั้นลองไปศึกษาดูเองนะครับ

และเมื่อเราถูกสอนมาแบบนั้น ทำให้เรามาเขียนแบบนี้กับ Swift แล้วพบว่าโดน compiler ด่าแบบนี้


หลายคนก็เลยเอาออก เพราะว่าเอาออกแล้วมันใช้ได้... และคิดว่า Swift น่าจะฉลาดพอที่จะใส่ให้เราเอง แบบ @IBOutlet ซึ่งผิดถนัดครับ ไม่มีการใช้ให้อัตโนมัติใดๆ เนื่องจาก Protocol บน Swift จะใช้ในแนวทางของการทำ Type Sementics มากกว่า โดยธรรมชาติของมันเอง เลยทำตัวต่างจากคำว่า class นิดหน่อย และการประกาศ weak identifier ซึ่งต้องประกาศกับ object ใดๆ ที่เป็น class เท่านั้นตามที่โดนตักเตือน

ในการใช้งาน Delegation Pattern ในรูปแบบของการเตือนเมื่อมีการกระทำใดๆ เกิดขึ้นในระบบ และต้องการคนมาทำงานต่อนั้น ให้เราประกาศแบบนี้ครับ


ด้วยการประกาศแบบนี้ เราก็จะสามารถใส่ weak identifier ได้เหมือนเดิมแล้วครับ
เท่านี้แหละ Blog สั้นๆ เอาไว้เตือนใจตัวเอง ฮ่าาา

Comments

Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

Command Line Compiling C/C++ ,Java [Windows, Mac]

การเขียนโปรแกรมแก้ปัญหา "โจทย์รูปทรงสมมาตร"