Weak reference

จำได้ปีที่แล้วผมเคยต้องศึกษาเกี่ยวกับ reference แบบต่างๆของจาวาดู (ทำงานกับจาวา) มาปีนี้เจอคล้ายกัน แต่เป็นของ as3 แต่ตอนใช้กับจาวาไม่ค่อยเห็นความสำคัญเท่าไหร่ เพราะว่าไม่มีอะไรให้เห็นเหมือนอย่าง flash แต่ก็มีข้อแตกต่างอยู่บ้าง

reference ใน flash จะไม่แบ่งละเอียดยิบย่อยเหมือนของ java ที่มีสี่แบบ(strong, soft, weak, phantom) แต่จะมีแค่สองคือ strong กับ weak ไปเลย และความหมายก็ชัดเจนมากคือ reference ที่ยอมให้ gc จัดการได้ หรือไม่ได้ ขณะอ้างอิงอยู่ ก็เลยรู้สึกว่ามันง่ายดีนะ แต่พอเอาไปใช้จริงๆ มันดันไม่ง่ายนี่สิ เพราะ weak reference ของ as3 ดันมีให้ใช้จริงๆ แค่สองจุดคือ ตอนเพิ่ม listener กับ Dictionary

โดยปกติเวลาเพิ่ม listener ให้กับ object ใด as3 จะให้เป็น strong reference แต่ปกติแล้ว listener ที่เพิ่มไปจะไม่ได้เพิ่มให้วัตถุที่เป็นคนเรียก ดังนั้นเวลาวัตถุนั้นไม่ได้ใช้แล้วถูกลบไป listener ที่เพิ่มเข้าไปก็ยังอยู่ พอใช้ไปนานๆ เข้าเมื่อเกิด event ทีแล้วลอง debug ดูก็จะเห็นอะไรถูกเรียกเต็มไปหมด แถมความช้าจะบังเกิด จากแต่ก่อนกดปุ่มแล้วแสดงผลลัพธ์ทันทีก็กลายเป็นว่า มันแสดงเสร็จลบแล้วแสดงใหม่ซ้ำๆ ซึ่งก็ทำให้ไม่เข้าใจซักกะที ว่าแทนที่จะให้ค่าเริ่มต้นเป็น strong ทำไมไม่ให้เป็น weak ไปเลย จะได้ไม่ต้องมาใส่เป็น argument ทุกครั้งเวลาเพิ่ม listener ให้กับวัตถุใดๆ(แถมเป็น argument สุดท้ายในจำนวน 5 ตัวซะด้วย – -”)

เห้อ เขียนๆ ไปไม่รู้จะบอกว่าเหมือนกับจาวาดีหรือป่าว หลายอย่างมันก็เหมือนนะ แต่หลายอย่างมันก็ต่างกันโดยสิ้นเชิง แถมช่วงนี้ต้องเขียนสองภาษานี้สลับกัน บางทีเวลาประกาศตัวแปรก็ชักจะเอ๋อๆ เขียนสลับกันทุกที ต่อไปถ้าต้องเขียนอีกภาษา ท่าทางจะวุ่นมากกว่านี้ เห้อ

About llun

Just a programmer

,