• iOS开发


    因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替。Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法。也就是说,它只告诉你要做什么,但具体怎么做,它不关心。

    当一个类要使用某一个Protocol(协议)时,都必须要遵守协议。比如有些必要实现的方法,你没有去实现,那么编译器就会报警告,来提醒你没有遵守××协议。注意,我这里说的是警告,而不是错误。对的,就算你不实现那些“必要实现”的方法,程序也是能运行的,只不过多了些警告。

    Protocol(协议)的作用:

    1. 定义一套公用的接口(Public)

    • @required:必须实现的方法

    • @optional:可选 实现的方法(可以全部都不实现)

    2. 委托代理(Delegate)传值:

    它本身是一个设计模式,它的意思是委托别人去做某事。

    总结:协议是共同遵守的某种规则或规矩;代理是按照某种协议具体的实现者;

    下面引用了博客园中作者求真求道的部分文章,感觉比较清晰:https://www.cnblogs.com/iyou/p/4939823.html

    DaChu.h
    
    /**
     *  下面是声明协议的固定格式,DaChuDelegate是协议的名称,因为是代理协议,名称格式为:类名+Delegate
     */
    @protocol DaChuDelegate <NSObject>
    - (void)doSomethingAftercaiZuohaole;
    @end
    
    @interface DaChu : NSObject
    /**
     *  delegate 是dachu类的一个属性,weak 关键字是为了避免循环引用,<DaChuDelegate>表示遵守DaChuDelegate协议
     *  更加直白点:在大厨心里有一个人接受他的菜好了的信号去做一些事情,具体这个人是谁,大厨不关心,这个人的代号是delegate
     */
    @property (nonatomic, weak) id <DaChuDelegate> delegate;
    - (void)kaiShiZuoCai;
    @end
    Dachu.m
    #import "DaChu.h"
    
    @implementation DaChu
    - (void)kaiShiZuoCai{
        NSLog(@"开始做菜");
        sleep(2);
        NSLog(@"做好菜了,该上菜了");
        
       //下面这句是判断 一下delegate是否实现了doSomethingAftercaiZuohaole方法,如果delegate没有实现
        //直接[self.delegate doSomethingAftercaiZuohaole];会crash
        if ([self.delegate respondsToSelector:@selector(doSomethingAftercaiZuohaole)]) {
            [self.delegate doSomethingAftercaiZuohaole];
        }
        
    }
    @end

    下面看一看代理(实现者)这个类里面的内容:

    #import "LaoWang.h"
    #import "DaChu.h"
    
    /** <DaChuDelegate>表示遵守DaChuDelegate协议,并且实现协议里面的方法 */
    @interface LaoWang ()<DaChuDelegate>
    
    @end
    
    @implementation LaoWang
    - (void)laoWangKaiYe{
        NSLog(@"老王开业了");
        
        DaChu *dachu1 = [[DaChu alloc] init];
        dachu1.delegate = self;//说明老王充当代理的角色,负责接收菜好了的信号。
        [dachu1 kaiShiZuoCai];//大厨开始做菜
    }
    - (void)doSomethingAftercaiZuohaole{
        NSLog(@"老王知道了");//这里可以通知服务员去上菜了
    }
    @end

    总结:代理类似于现实生活中的代理公司,具体的工作代理公司帮你做;协议类似于你和代理公司签的合同。

  • 相关阅读:
    hdu5628 Clarke and math
    LOJ#2452. 「POI2010」反对称 Antisymmetry
    LOJ#2444. 「NOI2011」阿狸的打字机
    BZOJ2795: [Poi2012]A Horrible Poem
    LOJ#2427. 「POI2010」珍珠项链 Beads
    云主机文件系统readonly处理案例
    兼容性测试中如何切换和管理多个JDK版本
    Promise之你看得懂的Promise
    一次MySQL线上慢查询分析及索引使用
    考拉消息中心消息盒子处理重构(策略模式)
  • 原文地址:https://www.cnblogs.com/xujinzhong/p/8515236.html
Copyright © 2020-2023  润新知