深入理解iphone开发中的delegate
来源:互联网 发布:samsung打印服务软件 编辑:程序博客网 时间:2024/06/05 11:50
先举一个例子:
假如"我"的本职工作之一是“接电话”,但"我"发现太忙了或来电太杂了,于是我聘请一位"秘书"分担我“接电话”的工作,如果电话是老板打来的,就让“秘书”将电话转接给“我”。。。
那么,“我”就是A Object.
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)一个超能对象本身是否定了面向对象的概念和真谛了。为了让代码更简洁,条理更清楚,可以将部分职责分离。
协议本身没有具体的实现。只规定了一些可以被其它类实现的接口。
@protocal UITextFieldDelegate -(BOOL) textFieldShouldReturn:(UITextField *) textField ; @end
delegate 总是被定义为 assign @property
@interface UITextField @property (assign) id<UITextFieldDelegate> delegate; @end
这样我们就在UITextField内部声明一个委托(delegate),那么就需要委托的代理实现UITextFieldDelegate 中约定的行为
// 首先, 在接口里边声明要使用谁的Delegate @interface delegateSampleViewController : UIViewController <UITextFieldDelegate> {} @end // 然后在实现文件中初始化的时候, 设置Delegate为self(自己) @implementation delegateSampleViewController // .... UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 300, 400)]; textField.delegate = self;//设置当前的控制器为UITextField的代理,相当于注册(指定)代理人 [textField becomeFirstResponder]; [cell.contentView addSubview:textField]; [textField release]; // .... } // 实现UITextFieldDelegate中约定的行为 #pragma mark UITextFieldDelegate Method // called when 'return' key pressed. return NO to ignore. - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; }
Delegate and Protocol
- 我们通过发送消息给对象出发特定动作;对象发送某些变化的时候通过回调函数(callback)通知我们。对象在特定事件发生的时候,就会调用对应的回调函数,触发业务逻辑。
- 回调函数通过所谓的代理(Delegation)来实现.
委托(delegate)-------益处:
¨
¨
“委托模式”中一般有两个对象参与处理同一个请求,所谓的请求在iPhone中就是应用程序的生命周期和系统事件,接受请求的对象将请求委托给另一个对象来处理,同样在iPhone中对应的是UIApplication在接收到生命周期和系统事件后委托给UIApplicationDelegate来处理。
iPhone不采用继承体系而采用委托模式来实现聚合的原因,其更深层次在于iPhone框架的多样化使得继承无法保证子类行为的一致性,而委托模式恰恰是为了弥补继承的这个缺点诞生的。
每个项目都会有一个UIApplication对象来处理应用程序的生命周期和系统事件,main()函数通过UIApplicationMain()来初始化应用程序的UIApplication,如果想对应用程序的UIApplication进行操作,就只能通过[UIApplication sharedApplication]来获取到UIApplication的引用,这个方法会返回一个全局唯一的UIApplication对象给读者。
同样,读者可以通过如下代码获取应用程序的委托对象:UIApplicationDelegate* myDelegate = [[UIApplication sharedApplication] delegate];
协议 Protocol :
object-c 里没有多继承。那么又要避免做出一个对象什么都会(super class monster,huge ,super,waste)一个超能对象 本身是否定了面向对象的概念和真谛了。为了让代码更简洁,条理更清楚,可以将部分职责分离。
协议本身没有具体的实现。只规定了一些可以被其它类实现的接口。
delegate 总是被定义为 assign @property
@interface UITextField @property (assign) id<UITextFieldDelegate> delegate; @end
- 深入理解iphone开发中的delegate
- 深入理解iphone开发中的delegate
- 深入理解iphone开发中的delegate
- 深入理解iphone开发中的delegate by hennychen
- iphone开发中的delegate的理解一
- 理解iphone开发中的delegate(委托)
- iphone开发中的delegate
- iPhone开发之Delegate(代理、委托)的理解和使用
- iPhone开发之Delegate(代理、委托)的理解和使用
- IOS开发(37)之iphone开发中的delegate
- iphone开发中的delegate 其实是桥模式
- 深入理解Delegate与Event
- iphone中的delegate委托机制
- (6) iphone 开发 真正理解委托(delegate)与数据源(data source)
- 深入理解iPhone委托模式兼谈iPhone生命周期(手把手教你iphone开发 - 基础篇)
- 理解object-c 中的delegate
- 如何理解swift中的delegate
- 如何理解swift中的delegate
- 需求分析挑战之旅——疯狂的订餐系统
- 操作系统-磁盘调度算法:先来先服务,最短寻道时间优先,scan算法
- 10款CSS3按钮
- ASIHTTPRequest足够了吗?
- 鼠标坐标x,y
- 深入理解iphone开发中的delegate
- Java serialVersionUID的使用示例
- ADB常用的几个命令
- linux下搭建SVN服务器完全手册
- SSH2整合出现404的问题解决
- JSON 解析器
- 换老板了
- ASP.NET页面间数据传递的方法
- 晚上在床上不要侧着身玩手机