美文网首页
协议,代理,Category,Extension等的实现,原理,

协议,代理,Category,Extension等的实现,原理,

作者: 钎探穗 | 来源:发表于2016-03-26 10:49 被阅读209次

     @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:委托方需要代理方执行的操作)。

    相关文章

      网友评论

          本文标题:协议,代理,Category,Extension等的实现,原理,

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