• 协议


    协议:(有属性和方法, 只有.h文件)
    是一种要求,规则
    对应程序来讲,是只声明函数名,不实现
    协议可以被继承,包括多个父协议,但是类只有一个父类,协议可以多重采纳,一个类可以一次采纳多个协议,用协议来实现多重继承

    一个类遵守一个协议:.h文件加头文件,与<协议名>
    @interface 类名 (分类类名): 父类名 <协议名>

    实现协议中的声明方法
    关键字:

    @optinal (可选的) :声明可选遵守的属性和方法
    @required (必须的) :声明必须遵守的属性和方法 默认关键字
    针对属性:@synthesize (合成器) 如:synthesize name = _name;

    使用形式:多态
    a.函数参数多态
    b.数组多态
    c.返回值多态

    协议多态形式:

    //数组协议多态
    void test5()
    {
        id<TRProtocol2> b[2]; //b[i]只能调用协议中的方法,不能调用类中自定义的方法
        b[0] = [[TRClassA alloc] init];
        b[1] = [[TRClassB alloc] init];
        for (int i = 0; i < 2; i++)
        {
            [b[i] method1];
        }
    }
    
    //参数协议多态
    void fun(id<TRProtocol2> a)
    {
        [a method1];
    }
    void test6()
    {
        TRClassA *objA = [[TRClassA alloc] init];
        fun(objA);
        TRClassB *objB = [[TRClassB alloc] init];
        fun(objB);
    }
    
    //返回值协议多态
    typedef enum
    {
        CLASSA, CLASSB, CLASSC,
    }Type;
    id<TRProtocol2> get(Type type)
    {
        switch (type) {
            case CLASSA:
                return [[TRClassA alloc] init];
            case CLASSB:
                return [[TRClassB alloc] init];
            case CLASSC:
                return [[TRClassC alloc] init];
        }
    }
    void test7()
    {
        [get(CLASSA) method0];
        [get(CLASSB) method0];
    }
    

    注:继承只支持单重继承与多层继承,而用协议来实现多重继承,协议可以多重采纳<Protocol1, Protocol2 >

    成功的三大原则: 1、坚持 2、不要脸 3、坚持不要脸
  • 相关阅读:
    PHP中的list(),each(),reset()函数应用
    echo(),print(),print_r()
    Math.floor() 与 parseInt()
    利用Node.js轻松创建web服务器
    MySQL中Datetime与Timestamp
    修正正则匹配日期---基于网络未知大神的正则
    数据结构随笔-php实现栈
    数据结构随笔-php实现队列
    Js 获取时间戳
    linux 安装nginx+php+mysql
  • 原文地址:https://www.cnblogs.com/xulinmei/p/7413670.html
Copyright © 2020-2023  润新知