类目(Categorg) - 延展(Extension) - 协议(Protocol)

Categorg(类目)

类目特性

- 动态的为已经存在的类添加方法

- 保证类的原始设计规模可以变小,功能增加时再通过类目扩展

- 不需要访问原始类的源代码

- 不需要创建子类

类目特性的需求场景

- 原始类已经存在,例如系统提供的类NSString、NSArray

- 需要为原始类拓展自定义的功能

- 不能通过继承原始类的方式

提需求

为NSArray类添加一个拓展方法

— (NSArray *)take:(NSInteger)n;

用来获取数组中的前n个元素数组

Extension(延展)

延展特性

- 延展是一种匿名的类目

- 延展中可以添加成员变量(类目不可以)

- 延展的文件只创建接口文件

- 延展的方法接口需要在原始类中进行

延展特性的需求场景

- 原始类是由程序员自己编写的类,例如HHAnimal

- 需要为原始类拓展自定义的功能

- 不希望将代码的实现部分分开编写

- 不能通过继承原始类的方式

提需求

为原始类HHAnimal添加延展文件,将HHAnimal的接口文件分成两部分

在延展文件内添加便利构造器

+ (instancetype)animal;

在原始类的实现文件,实现延展中的方法

Protocol(协议)

协议特性

- OC语言内没有多继承

- OC语言内没有抽象类

- OC语言通过协议特性为原始类添加接口

协议特性的需求场景

同一个方法接口需要在不同的自定义类中使用

通过协议特性,为不同的自定义类添加相同的接口

在自定义原始类的实现文件中,实现协议中定义的方法

提需求

为不同的自定义类添便利构造器

+ (instancetype) create;

在自动以的原始类中实现便利构造器的功能

总结:

- 类目添加的方法接口要在类目的实现文件内去实现方法功能;

- 延展添加的方法接口要在原始类的实现文件内去实现方法功能;

- 协议添加的方法接口要在接受协议的类的原始文件内实现方法功能;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容