美文网首页iOS Developer
iOS设计模式之代理

iOS设计模式之代理

作者: 苏旋律 | 来源:发表于2016-04-26 17:07 被阅读88次

     以前刚学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);

    }

    相关文章

      网友评论

        本文标题:iOS设计模式之代理

        本文链接:https://www.haomeiwen.com/subject/fzpqrttx.html