ios中关于delegate(委托)的使用心得
来源:互联网 发布:赛维网络面试 编辑:程序博客网 时间:2024/05/18 01:27
在IOS中委托通过一种@protocol的方式实现,所以又称为协议.协议是多个类共享的一个方法列表,在协议中所列出的方法没有响应的实现,由其它人来实现.这叫好比我想买个手机,所以我有个buyIphone 方法,但是我不知道谁那买手机,所以把这个需求发布出去(比如公布在网站上),如果有卖手机的商人(也就是说他能实现buyIphone这个方法)看到,他就会接受我的委托,(在商人自己的类中实现<XXXdelegate>),那么我的委托对象就指向了这个商人..当我要买手机的时候,直接找他就行了.
例如:
<span style="font-size:18px;">@protocol MyDelegate-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money;@end@interface My : NSObject{ id<MyDelegate> deleage;}@property(assign,nonatomic)id<MyDelegate> delegate;@end</span>
代码中声明了一个协议 名叫Mydelegate,在其中有一个buyIphone方法,即一个委托项。当我要购买手机的时候只需要通过delegate 调用 BuyIphone方法即可.
如下:
<span style="font-size:18px;">-(void)willbuy{ [delegate buyIphone:@"iphone 4s" money:@"4888"];}</span>
不必关心谁实现了这一委托,只要实现了这个委托的类,并且buyIphone是声明的委托中必须实现的方法,那么就一定能够得到结果.
例如:商人类实现了这一委托(用<Mydelegate>表示实现)
<span style="font-size:18px;">#import <Foundation/Foundation.h>#import "My.h"@interface Business : NSObject<MyDelegate>@end</span>
然后在 @implementation Business 中调用 buyIphone方法
<span style="font-size:18px;">#import "Business.h"@implementation Business-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money{ NSLog(@"手机有货,这个价钱卖你了,发货中!!");}@end</span>
委托是Cocoa中最简单、最灵活的模式之一。委托是指给一个对象提供机会对另一个对象中的变化做出反应或者影响另一个对象的行为。其基本思想是:两个对象协同解决问题。一个对象非常普通,并且打算在广泛的情形中重用。它存储指向另一个对象(即它的委托)的引用,并在关键时刻给委托发消息。消息可能只是通知委托发生了某件事情,给委托提供机会执行额外的处理,或者消息可能要求委托提供一些关键的信息以控制所发生的事情。
委托方法通常包括3种动词:should、will、did。
should表示一个动作发生前,通常带有返回值,可以在动作发生之前改变对象状态。
will在动作发生前,委托可以对动作做出响应,但不带有返回值。
did在动作发生后做出的响应。
从方法的定义我们不难看出委托模式能够起到两方面的作用:
第一:委托协助对象主体完成某项操作,将需要定制化的操作通过委托对象来自定义实现,达到和子类化对象主体同样的作用。
第二:事件监听,委托对象监听对象主体的某些重要事件,对事件做出具体响应或广播事件交给需要作出响应的对象。
个人理解采用委托模式的好处在于:
1、避免子类化带来的过多的子类以及子类与父类的耦合
2、通过委托传递消息机制实现分层解耦
转载自:http://blog.csdn.net/huifeidexin_1/article/details/7567731
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- ios中关于delegate(委托)的使用心得
- c++用链表实现一元多项方程式
- eclipse工具栏不见了怎么办
- linux下使用nohup
- java集合框架
- gem5三级缓存配置,其中L1和L2为cpu独享
- ios中关于delegate(委托)的使用心得
- ubuntu14.04 开启root登陆
- 日经春秋 20150517
- android 测试工具(一)—— Monkey
- 【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量
- 【机房收费系统】总结
- 欢迎使用CSDN-markdown编辑器
- 黑马程序员--ios基础--c语言--指针
- 日经社説 20150517 「金メダル庁」では情けない