浏览 6348 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-24
在iPhone的开发框架中,回调函数通过所谓的代理(Delegation)来实现,举例说明:每个UITextView对象都有一个delegate属性,该属性指向一个特定的对象,所谓特定指的是该对象遵从特定的协议(Protocol),这个与Java中的Interface应该是同一概念,指的是预定义方法的集合,如: @protocol UITextViewDelegate @optional -(BOOL) textViewShouldBeginEditing: (UITextView *)text View; -(BOOL) textView:(UITextView *)text View shouldChangeTextInRange:(NSRange) range raplacementText:(NSString *)text; -(void) textViewDidChange:(UITextView *)textView; @end 单对象的特定事件触发的时候,对象就会调用delegate指向对象对应的协议方法。在苹果的开发文档中,每个协议都有单独的页面列出所有的方法和参数。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-03
最后修改:2011-07-03
不好意思,I'M新手,看了些文档说,view层最好不要直接调用controller层,而是通过委托的机制,这个委托应该就想楼主说的java里的interface,现在有个没理解的东西,.m文件和.h文件,是不是.m文件属于model层,.h文件属于controller层??
|
|
返回顶楼 | |
发表时间:2011-07-05
单对象的特定事件触发的时候,对象会调用delegate指向对象对应的协议方法。
|
|
返回顶楼 | |
发表时间:2011-07-06
pslff 写道 不好意思,I'M新手,看了些文档说,view层最好不要直接调用controller层,而是通过委托的机制,这个委托应该就想楼主说的java里的interface,现在有个没理解的东西,.m文件和.h文件,是不是.m文件属于model层,.h文件属于controller层??
不是,m是实现,h是定义,跟h与C、CPP的关系差不多 |
|
返回顶楼 | |
发表时间:2011-07-06
antonia 写道 单对象的特定事件触发的时候,对象会调用delegate指向对象对应的协议方法。
如果这样说会更准确:delegate的存在,是某对象行为的未知部分,并不是对象会调用delegate的某个方法,而是对象的某个方法中有一个步骤是对delegate的方法调用,这只是对象该行为中的一个步骤。 |
|
返回顶楼 | |
发表时间:2011-07-06
最后修改:2011-07-06
稍微补充一下:
delegate本身和protocol其实没有必然的联系,比如某个delegate可以不是一个protocol的对象、他可以是某个interface的object或者甚至是一个structure都可以,当然,这有悖于delegate模式的定义。 说道protocol,可以参照interface来对比一下,因为这两者的地位比较相近 从道义上来讲,interface可以看作“君子协议”,而protocol可以看作“要求严格遵守的法律” 大家写代码的时候就会发现,比如我的interface定义为某种样子,但是实质上,实现这个interface的时候完全可以不按照interface定义来做实现,这不是什么问题,只不过这样看起来我们就“有点小人了”,因为告诉别人“我长这个样子”,但是实质上“我长成了另一个样子” protocol则不同,根据OBJ C 2.0的扩充(当然,在更早的版本中,protocol实际上跟interface木有太大区别,但是编码规范会推荐我们要“严格”遵守protocol定义),可以用@required来规定必备方案,这样就实现了与interface不同的地位:protocol定义是“法律”,这样就类似了强类型语言的接口。 但是……实质上也不是这样的……对于obj c,本身是一种动态性极强的语言蓝本,“你可以让看起来不会吃饭的花朵尝试吃饭”、“你发现狗看起来可以吃饭,但是当你喂食的时候,他因为没学会吃饭,而导致崩溃”,这是很常见的现象。所以我们只要知道interface和protocol等存在的意义即可,至于实际运用中如何,相信大家心里自然有一杆秤。 |
|
返回顶楼 | |