Objective-C语法基础之Category的使用

Category:扩展类或分类 无论一个类设计的如何完美,都不可避免的会遇到没有预测到的需求,那怎么扩展现有的类呢?当然,继承是个不错的选择。但是Objective-C提供了一种特别的方式来扩展类,叫Catagory,可以动态的为已经存在的类添加新的行为。这样可以保证在类的原来的基础上,较小的改动就可以增加需要的功能。使用Category对类进行扩展时,不需要访问其源代码,也不需要创建子类,这样我们可以扩展系统提供的类。Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。 通过一个简单的例子看看Category如何使用。 先创建一个简单类:Student

Student.h 文件 #import <UIKit/UIKit.h>

@interface Student : NSObject

- (void)hello;

  @end

Student.m文件 #import "Student.h"

@implementation Student

- (void)hello
{
 NSLog(@"大家好,我是Young");
}

@end

开始创建分类Category 001、command + n,选择Object-C File

WechatIMG30.jpeg

002、选择Category和目标类(给某个类添加分类)

WechatIMG31.jpeg

003、创建成功,在新文件里写扩充方法 在声明文件和实现文件中用“()”把Category的名称括起来。原类名+Category”的这是约定的文件命名方式。文件的名字显示也是如此

WechatIMG32.jpeg

WechatIMG29.jpeg

004、使用Category分类,导入头文件,直接调用方法

WechatIMG34.jpeg

输出结果

WechatIMG35.jpeg

那的Category的使用场景: 1、类包含了很多个方法实现,而这些方法需要不同团队的成员来实现 2、当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时。

Category能实现上面的需求,当然也有使用Category是需要注意的问题: 1、Category可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就通过继承创建子类来实现。 2、Category可以重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现。 3、和普通接口有所区别的是,在Category的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法。

点击下载Demo

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

BZOJ5312: 冒险(势能均摊线段树)

结论:如果一次操作对区间& 和 区间| 产生的影响是相同的,那么该操作对整个区间的影响都是相同的

942
来自专栏云霄雨霁

设计线程安全的类

1664
来自专栏Echo is learning

R 数据分析

2092
来自专栏码云1024

C#文件

2875
来自专栏coding

Linux文本处理命令

1122
来自专栏钟绍威的专栏

初学File类

对File类的基本方法的理解 今天刚开始学了File类 一开始看思想编程看得迷迷糊糊的,之后受不了了,直接去看API文档 归纳: File->jav...

19410
来自专栏xingoo, 一个梦想做发明家的程序员

Elasticsearch 连接查询

在一般的关系型数据库中,都支持连接操作。 在ES这种分布式方案中进行连接操作,代价是十分昂贵的。 不过ES也提供了相类似的操作,支持水平任意扩展,实现连接...

31910
来自专栏DOTNET

【翻译】MongoDB指南/CRUD操作(一)

【原文地址】https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档...

3359
来自专栏MasiMaro 的技术博文

OLEDB 调用存储过程

除了常规调用sql语句和进行简单的插入删除操作外,OLEDB还提供了调用存储过程的功能,存储过程就好像是用SQL语句写成的一个函数,可以有参数,有返回值。 ...

1061
来自专栏技术之路

设计模式:单例模式

今天来简单来说一下单例模式:它要确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 比如我们登录一个系统的时候要记录一个员工的信息,在整个系统运行...

2218

扫码关注云+社区