美文网首页
协议与委托

协议与委托

作者: 罂粟之城 | 来源:发表于2019-03-26 23:32 被阅读0次

协议其作用类似于接口,用于定义多个类都应该遵守的规范,协议不提供实现一般由类来完成;

1. 使用类别 Category 实现非正式协议

    这是一种以NSObject为基础,为NSObjcet创建类别,创建类别时即可指定该类别新增的方法。
    当某个类或者子类中实现该NSObject的类别时,就可以直接使用实现该类别下的拥有的方法。 
    如: NSObject+Entable.h    有NSobject的Entable的类别中定义类一个 test 方法
            @interface NSObject(Entable)
                -(void)test;
            @end    
        Test.h   继承于NSObject
                @interface Test:NSObject
                @end
        Test.m
            @implementle Test
                //下面语句的方法就是继承于父类的非正式协议的 test 方法;
                    -(void)test{
                    NSLog(@"口感很好!");
                    }
            @end
>>>
还可用于扩展某个常用类或者自定义类使用:
如 UIColor+Hex.h/UIColor+Hex.m
是对于 `UIColor` 类的常用方法扩展,只需要导入头文件即可直接使用 `UIColor` 扩展类的相关方法。

2.正式协议的定义

        正式协议使用@protocol关键字
        基本语法格式如下:
            @protocol 协议名<父协议1,父协议2....>//协议只能继承协议不能继承类;如@protocol UIPickerViewSource<NSObject>是实现NSobject这个父类协议。
            {
                多个方法定义.....//定义的方法只有方法签名没有方法实现,方法既可以是类方法也可以是实例方法;
            }
            @end
    为了弥补正式协议必须实现协议中定义的所有方法造成的灵活性不足,新增加两个关键字@optional和@required,一个是定义的方法是可以选择实现的,一个是必须实现的方法。

>>> 
这种正式协议也是 `delegate` 代理模式的模型 

不论在非正式协议中还是在正式协议中,当一个类在实现一个协议时.如果在非正式协议中继承的类没有实现协议方法并且非正式协议本身也没有实现该方法,则在最后运行程序就会引起-unrecognized selector sent to instance...-错误;

若在正式协议中是被 @required 关键字修饰的则在实现协议的类中必须实现这个方法,否则在运行程序时会出现 -unrecognized selecotr sent to instance... -错误

相关文章

  • swift协议与委托的区别

    委托与协议的关键字都是protocol ,但要注意委托代理 需要协议继承AnyObject

  • 协议与委托

    一、协议(protocol)的基本概念 二、委托设计模式 /* 三、 示例:中介找房

  • 协议与委托

    协议其作用类似于接口,用于定义多个类都应该遵守的规范,协议不提供实现一般由类来完成; 1. 使用类别 Catego...

  • UIDatePicker、UIPickView和UICollec

    1. 视图中的委托协议与数据源协议 相对简单的视图只指定了委托协议,例如UITextField(UITextFie...

  • Effective Objective-C 2.0 总结(四)

    协议与分类 第 23 条:通过委托与数据源协议进行对象间通信 Objective-C 可以使用 “委托模式”(De...

  • 2018-05-03

    第四章:协议与分类 23.通过委托协议和数据源协议与对象间通信 委托模式:用于遵循协议的对象对自身传递信息(对内接...

  • Effective Objective-C 2.0(第4章)

    编写高质量iOS与OS X代码的52个有效方法 第4章 协议与分类 23.通过委托与数据源协议进行对象间通信 委托...

  • 《Effective Objective-C 2.0》读书笔记(

    第四章 协议与分类 第25条:通过委托与数据源协议进行对象间通信 委托模式 可以将数据与业务逻辑解耦。比如tabl...

  • EffectiveObjective-C2.0 笔记 - 第四部

    4 协议与分类 4.1 通过委托与数据源协议进行对象间通信 1. 协议(protocol)类似 java 的接口(...

  • 第 4 章 协议与分类

    第 4 章 协议与分类第 23 条:通过委托与数据源协议进行对象间通信@optionalif ([_deleg...

网友评论

      本文标题:协议与委托

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