ios中关于delegate(委托)的使用心得
来源:互联网 发布:重生之君颜网络剧 编辑:程序博客网 时间:2024/06/10 06:30
http://blog.csdn.net/huifeidexin_1/article/details/7567731
ios中关于delegate(委托)的使用心得
分类: iOS开发 2012-05-15 10:54 807人阅读 评论(1)收藏 举报
从开始从事OC工作到现在大概1年多了,从当初接触oc的"协议"的不明白,到现在代码中随处可见的委托,协议,其中感悟颇多。
首先,大家应该都明白的是委托是协议的一种,顾名思义,就是委托他人帮自己去做什么事。也就是当自己做什么事情不方便的时候,就可以建立一个委托,这样就可以委托他人帮自己去实现什么方法。
其次,我简单的总结了一下自己用到的委托的作用有两个,一个是传值,一个是传事件。
1.所谓传值经常用在b类要把自己的一个数据或者对象传给a类,让a类去展示或者处理。(切分紧耦合,和代码分块的时候经常用)
2.所谓传事件就是a类发生了什么事,把这件事告诉关注自己的人,也就是委托的对象,由委托的对象去考虑发生这个事件后应该做出什么反映。(这个经常见,例如在异步请求中,界面事件触发数据层改变等等)
3.利用委托赋值,这种方法感觉是为了不暴露自己的属性就可以给自己复值,而且这样更方便了类的管理,只有在你想要让别人给你赋值的时候才调用,这样的赋值更可控一些。(例如tableView中的委托(dateSource)中常见)。
最后,我想分享一下在使用委托的时候的一些心得和注意事项。
心得:delegate的命名要准确,尽量看名字就知道用法。delegate和通知有的用法有些象,但是前者是单对单的,后者是单对多的情况。
注意:在dealloc要把delegate至为nil,还有就是delegate设置属性的时候要用assign,不要用retain。
委托
在IOS中委托通过一种@protocol的方式实现,所以又称为协议.协议是多个类共享的一个方法列表,在协议中所列出的方法没有响应的实现,由其它人来实现.这叫好比我想买个手机,所以我有个buyIphone 方法,但是我不知道谁那买手机,所以把这个需求发布出去(比如公布在网站上),如果有卖手机的商人(也就是说他能实现buyIphone这个方法)看到,他就会接受我的委托,(在商人自己的类中实现<XXXdelegate>),那么我的委托对象就指向了这个商人..当我要买手机的时候,直接找他就行了.
例如:
@protocol MyDelegate-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money;@end@interface My : NSObject{ id<MyDelegate> deleage;}@property(assign,nonatomic)id<MyDelegate> delegate;@end
代码中声明了一个协议 名叫Mydelegate,在其中有一个buyIphone方法,即一个委托项。当我要购买手机的时候只需要通过delegate 调用 BuyIphone方法即可.
如下:
-(void)willbuy{ [delegate buyIphone:@"iphone 4s" money:@"4888"];}
我不必关心谁现实了这一委托,只要实现了这个委托的类,并且buyIphone是声明的委托中必须实现的方法,那么就一定能够得到结果.
例如:商人类实现了这一委托(用<Mydelegate>表示实现)
#import <Foundation/Foundation.h>#import "My.h"@interface Business : NSObject<MyDelegate>@end
然后在 @implementation Business 中调用 buyIphone方法
#import "Business.h"@implementation Business-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money{ NSLog(@"手机有货,这个价钱卖你了,发货中!!");}@end
- 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(委托)的使用心得
- linux设备驱动程序开发笔记
- 单链表
- 相信未来
- 跟燕十八学习PHP-第二十七天-左右内连接的区别
- nginx的worker-master启动之worker进程
- ios中关于delegate(委托)的使用心得
- 内部类可以引用它的包含类的成员吗?有没有什么限制?
- Java 反射机制的理解
- 牛刀:中国权贵资本是如何赚钱的?
- linux下绿色安装Java开发工具JDK
- linux内核编译安装出错
- oracle连接驱动jdbc的一个bug
- VC.NET写的DLL导出函数的奇怪现象
- HTTP POST GET 本质区别详解