美文网首页
Protocol,Delegate,Category,Exten

Protocol,Delegate,Category,Exten

作者: 西门丨不吹雪 | 来源:发表于2016-08-01 16:43 被阅读92次

    @protocol是我们协议的标识,协议中的方法有两种,一种是必须实现的,另一种是可选择实现的。这是一种间接扩充功能的方式,协议中只有一堆方法的声明,只有.h文件。协议的定义以@protocol开始,以@end结束。使用时需要类服从协议,实现协议中的方法来扩充功能,而且只能扩充方法,不能扩充实例变量。局限于必须要拥有该类的源代码。

    @protocolSayHello
    //必须实现的方法,默认方法就是必须实现的
    @required
    -(void)sayHello;
    //可选择实现的方法
    @optional
    -(void)sayByeBye;
    

    Category:

    •1;Category:也叫分类,类目。是为没有源代码的类扩充功能。
    •2;扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承。
    •3;该方式只能扩充方法,不能扩充实例变量。
    ** Category**的使用:
    •1;使用类目添加的方法首先需要在对应的类中导入类目的.h文件
    •2;添加的方法是通过类目为源代码的类(eg:NSString)添加的一个类方法,因此该方法的调用需要原有类名调用。

    ** Extension:**

    使用场景:为能够获得源代码的类添加私有的实例变量和方法
    •注意:延展操作的类必须是能够获得源代码的类(具有.m文件的类)
    语法格式:1;Extension的语法格式和Category很相似,相当于把Category的.h文件挪到了原始类的.m文件中。2;使用延展为一个类添加一个私有的方法,同时添加私有的实例变量存储对应的信息。
    Extension的使用:通过延展定义的方法属于私有方法,外界没有访问权限,只能在当前类的.m文件中访问。
    ** Category**和Extension的区别:作用上:Category:为没有源代码的类添加方法。Extension:管理类私有方法。格式上:Category;定义一对.h和.m。Extension;把代码写到原始类的.m中。

    ** delegate**:代理,主要任务是帮忙完成一些我们不想做的事情。

    使用场景:当一些任务不想去实现,想让别人去实现,就可指定一个代理,去帮助完成,只需通知代理何时去做这些事情即可。
    delegate设计模式的使用我们首先需要明白三个要素:委托方(委托别人去执行某些操作的人/对象),代理方(被委托去执行某些操作的人/对象),协议(Protocol:委托方需要代理方执行的操作)。

    相关文章

      网友评论

          本文标题:Protocol,Delegate,Category,Exten

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