OC中类别扩展协议与委托

Posted 洛长安&王遇白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC中类别扩展协议与委托相关的知识,希望对你有一定的参考价值。

一、类别(category)

    类别(category)——通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中。通常只在类别中定义方法。(类别,接口部分的定义,通常该文件命名为已有"类+类别名.h"

    我们知道,如果一个函数在.h文件中无声明而在.m文件中定义它的实现,那么该方法就是私有方法,只能在本类的文件中使用。  若我们在类别的接口部分声明这个方法,那么我们就可以实现对该私有方法的访问。

二、扩展(extension)

    扩展(extension)——与类别相似,扩展相当于匿名类别,即没有类别名的类别。(类别,接口部分的定义,通常该文件命名为已有"类_xxx.h"

    在用法上,类别通常都都有单独的.h和.m文件。扩展则是临时的对某个类进行扩展,类的实现部分同时实现类接口部分定义的方法和扩展中定义的方法。定义类的扩展时,可以增加额外的实例变量,也可使用@property和@synthesize关键字,但在定义类的额外列表时不允许额外定义实例变量。

三、协议(protocol)-委托

    协议(protocol)——以NSObject为基础,为NSOject创建类别,创建类别时指定该类新增的方法,既可以实现非正式协议。而OC中对于实现非正式协议的类而言,OC并不强制实现该协议中的所有方法 。正式协议使用@protocol关键字定义。协议是支持多继承的。在OC2.0标准中新增了@required\@optional两个关键字,声明方式是必须是必须实现还是可选的,默认为@required。

    使用协议来定义变量,那么这些变量只能调用该协议中声明的方法,否则编译器会提示错误。

    使用协议来定义变量的两种语法

NSObject<协议1,协议2..>*变量名;
id<协议1,协议2...> 变量;

 

    协议体现的是一种规范,定义协议的类可以把协议定义的方法委托(delegate)给实现协议的类,这样可以让类具有更好的通用性,具体的动作交给协议的实现类来完成。在大量的应用程序开发中大量依赖委托这个概念。

以上是关于OC中类别扩展协议与委托的主要内容,如果未能解决你的问题,请参考以下文章

2-1 OC 类别(分类)

OC类别与扩展

OC基础回想协议

[OC学习笔记]协议与分类

OC中的类别Category-协议Protocol-… - 韩俊强的博客 - 博客频道 - CSDN.NET

31-oc分类和类扩展