如題,以前是個c#新手,在c#裡也常用委託,回來熟了lambda後都是直接寫個lambda過去。當時沒覺著二者差別多大。
但現在搞iOS有點暈了,怎麼這裡block和delegate是不同的東西?然後再看看委託的使用上怎麼又覺著這不是和使用傳統意義上的介面然後多態一個意思嘛?只是delegate有optional和request而已啊。
哎呦不對,我在寫這個問題的時候突然感覺好像委託就是我所說的這個原理?求大神給解惑…
伊谢尔伦2017-04-25 09:05:21
objc 裡的delegate 跟c# 裡的不是一個概念, obj c 裡delegate 是設計模式裡的委託模式,一般就是個協議(別的語言裡都叫interface,objc 裡叫protocol),optional 和required(我猜你說request 應該是拼錯了)是說實作協定時的某個方法或變數是必須的還是可選的。例如table view 本身是不知道要顯示幾行,要顯示什麼東西的, 需要顯示的時候,它就會去問它的delegate(另外一個服從了UITableViewDelegate/UITableViewDatasource 的物件的弱引用),我要顯示幾行?每行多高?顯示什麼東西?一個類別服從了 UITableViewDelegate 的話,有一些方法是必須實現的(required), 有一些是可選的(optional)。你就當在 objc 裡跟 c# 裡只是用重了關鍵字吧,但意思不一樣。