一、为什么写这篇文章
我目前在编程方面是菜鸟,
这篇文章也只适合刚入行的菜鸟,
之所以写这篇文章有两个目的:
第一是为了自己复习用,
第二,为了给和我一样的菜鸟们一个参考;
我发觉好多介绍这两个概念的文章,
要么一开头就写在java中如何,在c++中如何,
大哥,我就是一菜鸟,未入行前是小白,
我只略懂oc这一门编程语言,
你给我扯什么java,C++只能令我更迷茫。
二、委托和协议的区别
三、王五和马六的买卖怎么做?
#import <Foundation/Foundation.h>
@class Wangwu;
//王五的协议内容
@protocol FindworkDelegate <NSObject>
-(void)moneyMax:(Wangwu*)WW;
-(void)treatMent:(Wangwu*)WW;
@end
2、王五的要求是只要遵守协议里的要求办任何人都可以帮我找工作,因此授权形式如下,并且开始和截止日期的决定权在王五自己手里。@interface Wangwu :NSObject
//代理的授权范围,谁干都行,但必须遵守我的协议
@property(nonatomic,weak)id <FindworkDelegate>delegate;
-(void)goodWork;//什么时候开始找,什么时候不找我说了算。
@end
#import <Foundation/Foundation.h>
#import "Maliu.h"
@protocolFindworkDelegate;……//对协议进行提前声明和@class用途一致
@interface Maliu :NSObject <FindworkDelegate>
@end
//开始寻找符合王五协议要求的工作;(实现方法)
#import "Maliu.h"
#import "Wangwu.h"……//保证实现方法的时候有提示
@implementation Maliu
-(void)moneyMax:(Wangwu *)WW{
NSLog(@"这个工作%@大大滴有钱!",WW);
}
-(void)treatMent:(Wangwu *)WW{
NSLog(@"这个工作%@待遇大大滴好!",WW);
}
@end
#import <Foundation/Foundation.h>
#import "Wangwu.h"
#import "Maliu.h"
int main(int argc,constchar * argv[]) {
@autoreleasepool {
//初始化王五和马六
Wangwu*WW1=[[Wangwualloc]init];
Maliu*ML=[[Maliualloc]init];
//马六把找工作的情况反馈给王五
WW1.delegate=ML;
//王五放出找工作大招
[WW1 goodWork];
//王五再次委托马六找工作
Wangwu*WW2=[[Wangwualloc]init];
WW2.delegate=ML;
//王五再次放出找工作大招
[WW2 goodWork];
}
return 0;
}
5、马六说已经找好了,赶紧拿钱来
@implementation Wangwu
-(void)goodWork{
//王五说甭急,我比较下这两份工作再做决定(传回来的参数可以判断是那份工作的内容介绍)
if ([_delegaterespondsToSelector:@selector(moneyMax:)]||[_delegaterespondsToSelector:@selector(treatMent:)]){
[_delegatemoneyMax:self];
[_delegatetreatMent:self];
}
else{
NSLog(@"找到的工作不符合王五的要求");
}
}
@end
2016-03-14 00:51:29.005 work[3383:360865] 这个工作<Wangwu: 0x100103a60>大大滴有钱!
2016-03-14 00:51:29.008 work[3383:360865] 这个工作<Wangwu: 0x100103a60>待遇大大滴好!
2016-03-14 00:51:29.008 work[3383:360865] 这个工作<Wangwu: 0x1003001b0>大大滴有钱!
2016-03-14 00:51:29.008 work[3383:360865] 这个工作<Wangwu: 0x1003001b0>待遇大大滴好!
Program ended with exit code: 0
总结:
1、委托行为借助协议得以完成;这里王五通过FindworkDelegat协议委托马六找工作;协议要求钱多事儿少离家近;
2、并且规定必须遵守这个协议的要求找工作才可以付钱:@property(nonatomic,weak)id <FindworkDelegate>delegate;
3、委托找两份工作因此每反馈回来一次,需要判断是哪份工作的内容介绍:使用respondsToSelector:@selector(moneyMax:)方法进行判断。
Wangwu*WW1=[[Wangwu alloc]init];第一份工作
Wangwu*WW2=[[Wangwu alloc]init];第二份工作
if ([_delegate respondsToSelector:@selector(moneyMax:)]||[_delegate respondsToSelector:@selector(treatMent:)]){
[_delegate moneyMax:self];self是指具体是哪份工作?
[_delegate treatMent:self];
}