作者uranusjr (←这人是超级笨蛋)
看板MacDev
标题Re: [问题] Obj-C中的delegate如何运作?
时间Fri May 29 17:34:19 2009
※ 引述《leondemon (狗狗)》之铭言:
: 看了一些资料和书 还是不太懂什麽是delegate
: 以及他是如何运作的...
: 有没有什麽比较白话的例子能够帮助了解呢?
: 谢谢:)
用 Aaron Hillegass 的讲法XD
假设你现在想制造一个正义英雄
当然如果你旁边有 Superman 之类的另当别论, 但假设你没有
那你有两种作法, Hillegass 称之为「机器战警法」和「霹雳游侠法」
大部分的物件导向语言都使用前者
先建立一个「人」class 的 subclass, 然後开始改写
例如把「右手」method 改成机枪,「左手」改成机关炮等等
「眼睛」加上热扫描功能顺便内建夜视, 顺便新增一个喷射器 method 还可以飞
但 Objective C (in Cocoa) 的作法不太一样
他们另外打造了一台霹雳车「夥计」
当然夥计是有特别设计过的, 要李麦克才能开
不过这个李麦克除了把妹很罩之外其实没什麽用, 只是(有主角威能的)一般人
这样我们就说, 夥计是李麦克的 delegate
平常走在路上的时候, 车子当然是李麦克在开, 事情是交给他来处理
可是当遇到他没办法解决的问题时, 例如前面有墙
李麦克就会把控制权交给夥计, 让他发射几根火箭炮来开路
当然, 夥计开完路之後就会把控制权交还给李麦克, 让他继续开车
所以在 Cocoa 程式里你不太会去弄一堆 subclass 继承来继承去
而是会建立一个又一个的 helper object, 来辅佐已有的 class 做到更多事
大概是这样...
有兴趣可以看 CocoaCast 的 Episode 7
或者 Hillegass 在 Cocoa Programming in Mac OS X 里我觉得写得最清楚
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.72.123
1F:推 leondemon:妈呀 Hillegass写的都没你生动 出书了啦 05/29 19:35
2F:推 leondemon:可是我还是不太懂Helper Object和delegate的不同... 05/29 19:39
3F:→ leondemon:我一直以为伙计是helper object 05/29 19:39
4F:→ leondemon:在interface builder中 何时要connect物件的delegata? 05/29 19:41
5F:→ adms:很有趣的例子 05/30 09:20