iphone开发中的delegate 其实是桥模式

先举一个例子:

假如"我"的本职工作之一是“接电话”,但"我"发现太忙了或来电太杂了,于是我聘请一位"秘书"分担我“接电话”的工作,如果电话是老板打来的,就让“秘书”将电话转接给“我”。。。



那么,“我”就是A Object. “秘书”就是"我"的“Delegate”。写成代码就是 -- [我 setDelegate:秘书];

delegate的概念出现与mvc(model-view-controller),protocol,单线继承 密切相关

The main value of delegation is that it allows you to easily customize the behavior of several objects in one central object.



Cocoa 中处理事件的方式有几种,其中一种是你可以重载类中的对应的事件处理方 法,比如MouseDown事件在NSResponse类中就被方法mouseDown:处理,所以所有继承自NSResponse的类都可以重载 mouseDown:方法来实现对MouseDown事件的处理。



另外一种处理方式就是使用Delegate,当一个对象接受到某个事件 或者通知的时候, 会向它的Delegate对象查询它是否能够响应这个事件或者通知,如果可以这个对象就会给它的Delegate对象发送一个消息(执行一个方法调用)

协议 Protocol :

我说下我的理解。object-c 里没有多继承。那么又要避免做出一个对象什么都会(super class monster,huge ,super,waste)一个超能对象 本身是否定了面向对象的概念和真谛了。为了让代码更简洁,条理更清楚,可以将部分职责分离。

协议本身没有具体的实现。只规定了一些可以被其它类实现的接口。

  1. @protocal UITextFieldDelegate
  2. -(BOOL) textFieldShouldReturn:(UITextField *) textField ;
  3. @end


delegate 总是被定义为 assign @property

  1. @interface UITextField
  2. @property (assign) id delegate;
  3. @end

(#add,到此,如果还看不出桥模式的基本是不懂C++的,"委托"这个词我觉得被滥用了,包含一个类成员变量然后利用它去调用其成员函数,岂不是太普通不过了,除了基本类型变量,类包含另一个类的对象或指针简直就是家常便饭,而桥模式以此基础上提升了一个层次,看似平常,其实伟大)

这样我们就在UITextField内部声明一个委托(delegate),那么就需要委托的代理实现UITextFieldDelegate 中约定的行为

  1. // 首先, 在接口里边声明要使用谁的Delegate
  2. @interface delegateSampleViewController : UIViewController
  3. {}
  4. @end
  5. // 然后在实现文件中初始化的时候, 设置Delegate为self(自己)
  6. @implementation delegateSampleViewController
  7. // ....
  8. UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 300, 400)];
  9. textField.delegate = self;//设置当前的控制器为UITextField的代理,相当于注册(指定)代理人
  10. [textField becomeFirstResponder];
  11. [cell.contentView addSubview:textField];
  12. [textField release];
  13. // ....
  14. }
  15. // 实现UITextFieldDelegate中约定的行为
  16. #pragma mark UITextFieldDelegate Method
  17. // called when 'return' key pressed. return NO to ignore.
  18. - (BOOL)textFieldShouldReturn:(UITextField *)textField
  19. {
  20. [textField resignFirstResponder];
  21. returnYES;
  22. }

原文链接: https://www.cnblogs.com/hibernate6/archive/2012/04/09/2521898.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/46665

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午10:57
下一篇 2023年2月8日 下午10:58

相关推荐