以前刚学iOS的时候,也是半懂非懂的,之喜欢敲一些界面的东西.对于界面的交互,界面的传值,就看到就头疼,不知道怎么去随心所欲的写出需要传值的部分代码.我一直相信,遇到问题,解决问题,才能让我们真正成长.之前纯粹在学的时候,也许当时能照葫芦画瓢的写出,可是,却不了解,时间久了,什么和什么都是浆糊了.不过,iOS中代理还是很重要的,虽然现在block可以更简洁的实现代理的传值.不过,我想先理解代理,下篇文章在介绍block传值的实现.
代理:我的理解是,最简单的,我想小时候,当我第一次听到,有克隆人的时候,我就不止一次的想过,要是他能代替我上学就好了.
这里,我就是所谓的委托方,克隆人的我,就是我的代理.
我想让他做的事,就是他成为代理的条件.(他必须要会我想让他帮我做的事儿,上学,不然我要他干嘛?嘿嘿,其实,上学还是很重要的.如果当时梦想成真了,今天也不会是我在写博客给大家了.)
那么这件事就是我需要代理(克隆人我)实现的方法.
那么我怎么才能让他实现呢?我需要类似于现实生活中公司直接的合作,需要写一份协议.在iOS中还需要写个协议指针,这个协议指针就是为了任意一个人能成为我的代理.(所谓的解耦合).
好,以上,有了,委托方的3要素:
在MEViewController.h中
1)写一份协议
@protocol CloneMeViewControllerDelegate<NSObject>//1)这就是拟定的一份协议
2)写一个协议指针
-(void)iWantSomeBodyToGoToSchoolInsteadOfMeWithName:(NSString*)name;//2)拟定协议中约定好的方法
3)委托方想要代理(代替自己)实现的方法
@property (nonatomic,assign) id<CloneMeViewControllerDelegate>delegate;//3)这就是需要的协议指针.
1):id,说明这个代理人,随便什么类型
2):delegate:其实这只是个名字,你写出张三,李四或者苏旋律都行.
3):这是代表这个指针遵守协议.
那么我代理怎么知道我需要帮人家实现什么呢?那就要遵守下人家给我写好的协议嘛.另外实现约定的方法.
好,以上,有了,代理方的2要素
在CloneMeViewController.h中
1)遵守委托方写的协议
@interface CloneMeViewController : UIViewController<CloneMeViewControllerDelegate>//这就是代理人遵守协议,说明他要成为Me的代理.
在CloneMeViewController.m中
2)实现协议中约定好的方法
-(void)iWantSomeBodyToGoToSchoolInsteadOfMeWithName:(NSString *)name
{
NSLog(@"show收到:%@的指令",name);
}
网友评论