Delegate หลาย ๆ คนที่เขียนแอปฯ บน iOS Platform คงต้องคุ้นชินกับมันมากพอสมควร และก็ต้องเคยใช้มัน อย่างน้อย ๆ ก็ของ UITextField, ไม่ก็ UITableView แล้วเราเข้าใจมันไหมแล้วมันคืออะไร? ทำไมต้องมี Delegate? Delegate Method คืออะไร
จนผมได้ไปเจอคุณ fernyb เขียนตอบไว้ที่ Stackoverflow.com
A delegate is simply a reference to another object and a delegate method is a method of the delegate.
A delegate method implements the callback mechanism which usually takes the sender as one of the parameter to be called.
Delegate เปรียบเสมือนเป็นเพียงตัวที่ใช้ Reference ไปยัง Object ใด ๆ และ Delegate Method ก็คือ Method ของ Delegate (นี้ไม่ได้กวนตีนนะ ถึงมันจะกำปั้นทุบดิ้นไปหน่อยแต่มันก็คือแบบนี้แหละ)
ผมยกตัวอย่างง่าย ๆ สักตัวแล้วกันครบผมสร้างแอปขึ้นมาสักตัวโดยแอปนี้จะไปโหลดภาพมาแล้วก็แสดงบน UIImageView (แค่นี้แหละ)
*เฮ้ย ปั่นมึงจะยกตัวอย่างง่ายไปไหม เค้าไปใช้ Category ของ AFNetworking ไม่ดีกว่าหรอ 5555555+
โดย Code ใน MainViewController ผมมีดังนี้ครับ
MainViewController.m

Import Photo เข้ามา, ประกาศตัวแปรของ Photo และ UIImageView
และเพิ่ม Protocol PhotoDelegate เข้าไป
มีการ Init UIImageView และ Photo และมีการ set delegate ชี้ไปที่ MainViewController (ก็คือตัวมันเองนั้นแหละ)
และผมสร้าง Photo ขึ้นมาโดยมีรายละเอียดดังนี้ครับ
Photo.h

ใน Photo.h ผมสร้าง Protocol ขึ้นมาชื่อว่า PhotoDelegate โดยมี Deleagte Method คือ
didiLoadImage:(NSData *)data;
Method loadImage
Object delegate
Photo.m

ในนี้ผมสร้าง Method ขึ้นมาตัวนึงโดยทำหน้าที่โหลดรูปแบบกาก ๆ
ตรง sleep(10) ที่ผมเพิ่มเข้าไปผมต้องการสมมติว่ารูปแม่งใหญ่มาก ต้องใช้เวลาโหลดประมาณ 10 วินาทีกว่า ๆ 5555+
จะเห็นว่าตอนผมโหลดรูปผมจะเอาการทำงานลง Background Thread เพื่อให้แอปผมมันไม่ค้าง
และเมื่อทำงานเสร็จแล้วแอปมันก็จะกลับเข้ามาทำงานที่ Main Thread (หรือ UI Thread)
เพื่อส่งค่า NSData ที่ได้มานั้นกลับไปที่ MainViewController โดยใช้ Object delegate
(จำได้ไหมมันชี้ไปที่ไหนก็ MainViewController ไง)
มันก็จะไปทำงานที่ didLoadImage:(NSData *)data; ไงตัวเธอว์
นี้ไงที่ MainViewController.m

แล้วก็นำ NSData ที่ได้มาไป Update ImageView ซะ
ที่มา – fernyb