比如自己定义一个web请求类的封装 用来代理实现网络请求
本文参考了http://blog.csdn.net/huifeidexin_1/article/details/7567731
并自己写了一个网络请求的类来实际操作一下
用到的委托的作用有两个,一个是传值,一个是传事件。
1.所谓传值经常用在b类要把自己的一个数据或者对象传给a类,让a类去展示或者处理。(切分紧耦合,和代码分块的时候经常用)
2.所谓传事件就是a类发生了什么事,把这件事告诉关注自己的人,也就是委托的对象,由委托的对象去考虑发生这个事件后应该做出什么反映。(这个经常见,例如在异步请求中,界面事件触发数据层改变等等)
3.利用委托赋值,这种方法感觉是为了不暴露自己的属性就可以给自己复值,而且这样更方便了类的管理,只有在你想要让别人给你赋值的时候才调用,这样的赋值更可控一些。(例如tableView中的委托(dateSource)中常见)。
心得:delegate的命名要准确,尽量看名字就知道用法。delegate和通知有的用法有些象,但是前者是单对单的,后者是单对多的情况。
注意:在dealloc要把delegate至为nil,还有就是delegate设置属性的时候要用assign,不要用retain。
让B类代理A的网络处理
A.h文件
#import <Foundation/Foundation.h>
//声明一个Web协议
@protocol WebDelegate <NSObject>
- (void)requestWithURLString:(NSString *)urlString method:(NSString *)method;
@end
@interface Login : NSObject
{
//定义一个代理
id<WebDelegate>delegate;
}
A.m文件中
//让代理实现方法
[delegate requestWithURLString:urlString method:method];
//实现代理
@interface ScottWeb : NSObject<WebDelegate>
B.m文件中
//实现协议方法
- (void)requestWithURLString:(NSString *)urlString method:(NSString *)method{
}
就这样简单的几步实现了网络请求的封装,具体封装还未完成,但是原理相通。利用代理的方法可以很方便的让项目代码极大的降低耦合程度,同时也提高了代码的可复用性。