分类的作用与注意事项:

  1. 可以在不修改原来类的基础上,为一个类扩展方法。
  2. 最主要用法是给系统自带的类扩展方法。
  3. 分类中只能添加“方法”,不能增加成员变量。
  4. 分类中可以访问原来类中的成员变量,但是只能访问@protect和@public形式的变量。如果想要访问本类中的私有变量,分类和子类一样,只能通过方法来访问。
  5. 分类要添加属性需要用setter和getter方法、关联对象等
  6. 调用子类文件时要在.m文件中调用,否则程序会崩溃
    使用场景:给系统的类添加方法、给类拓展一些方法但不想让子类继承时

分类的创建:

新建一个文件时,会出现下面的页面:

我们选择Objective-C File
接下来会出现下面的页面:

接下来我们要为ViewController类创建一个change子类:
我们在上图中的File空格中填写change,然后File Type选择Category,Class空格中填ViewController即可成功创建。

创建成功之后的效果如下:

系统会自动生成 原类名+子类名 的文件
自此我们已经将子类创建成功了

接下来我们来创建一个例子:
ViewController.h中:

#import <UIKit/UIKit.h>@interface ViewController : UIViewController@end

ViewController.m中:(在.m文件中调用分类的.h文件,否则程序会报错)
我们创建一个按钮,在按钮的事件函数中调用子类中所写的方法(子类所写方法是当点击按钮后改变按钮的图片)

#import "ViewController.h"
//调用子类的文件
#import "ViewController+change.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.UIButton *buttonTest = [UIButton buttonWithType:UIButtonTypeCustom];[buttonTest addTarget:self action:@selector(pressButton:) forControlEvents:UIControlEventTouchUpInside];[buttonTest setImage:[UIImage imageNamed:@"shoucang.png"] forState:UIControlStateNormal];buttonTest.frame = CGRectMake(100, 200, 45, 45);[self.view addSubview:buttonTest];
}//按钮的事件函数
- (void) pressButton : (UIButton *) button {//调用分类中的方法[self changeImage:button];}@end

ViewController+change.h文件中:(在该文件中定义函数)

#import "ViewController.h"NS_ASSUME_NONNULL_BEGIN@interface ViewController (change)- (void) changeImage : (UIButton *) button;@endNS_ASSUME_NONNULL_END

ViewController+change.m文件中:(在该文件中实现函数)

#import "ViewController+change.h"@implementation ViewController (change)- (void) changeImage:(UIButton *)button {//改变按钮的图片[button setImage:[UIImage imageNamed:@"expressions.png"] forState:UIControlStateNormal];}@end

实际运行效果:
未点击按钮前:

点击按钮后:

可以发现,按钮的图片发生了改变。

Category(分类)的创建和使用相关推荐

  1. Category 分类、类别 总结 - iOS

    分类作用 分类:可以给某一个类扩充一些方法(不修改原来类的代码) 格式 // 声明 @interface Person (分类名称)@end// 实现 @implementation Person ( ...

  2. woocommerce 分类到菜单_Woocommerce教程:添加和编辑产品Category分类

    在使用WordPress的woocommerce商城插件制定商城的时候, 如果你公司拥有众多产品, 那么应该需要给这些产品添加Category分类, 以便分类管理产品, 让网站访客更快地找到自己想要的 ...

  3. R语言使用两个分类变量创建双向表(Two Way Table、两个分类变量的频率表)实战: 矩阵的双向表、dataframe的双向表、条形图和马赛克图来可视化频率表

    R语言使用两个分类变量创建双向表(Two Way Table.两个分类变量的频率表)实战: 矩阵的双向表.dataframe的双向表.条形图和马赛克图来可视化频率表 目录

  4. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类进行方法注入的优缺点 )

    文章目录 一.使用 Category 分类进行方法注入的优点 二.使用 Category 分类进行方法注入的缺点 一.使用 Category 分类进行方法注入的优点 之前的博客 [Groovy]MOP ...

  5. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Category 分类注入方法 )

    文章目录 一.方法注入 二.使用 Category 分类注入方法 三.完整代码示例 一.方法注入 在之前的博客中 , 主要是使用 Groovy 元编程 拦截方法 , 改变方法的实现 ; 使用元编程还可 ...

  6. Category(分类/类目)、Protocol(协议)、Extension(扩展/延展)

    Category(分类/类目): 利用Objective-C的动态运行时分配机制,Category提供了一种比继承更为简洁的方法来对class进行扩展,无需创建对象类的子类就能为现有的类添加新方法,可 ...

  7. 在Magento产品分类页面创建推荐产品(Featured Products)

    在进行Magento的相关操作的时候,你可能都想在产品分类页面添加上这一类产品的推荐产品(FeaturedProducts),这类产品一般是销售比较好的,或者是你的利润比较大的产品,那我们应该怎么样添 ...

  8. 哈希表的分类,创建,查找 以及相关问题解决

    总体的hash学习导图如下: 文章目录 定义 分类 字符hash 排序hash 链式hash(解决hash冲突) 创建链式hash 查找指定数值 STL map(hash) 哈希分类 完整测试代码 应 ...

  9. solidworks模板_SolidWorks文件属性分类和创建方法,图纸自动属性的基础

    1.文件属性 文件属性描述了基于Windows系统的文件的一些可用于识别该文件的细节信息.我们可以通过文件属性来搜索和组织文件.SolidWorks的文件添加有其独有的文件属性,这些属性可更好地用于工 ...

最新文章

  1. python执行命令并返回结果集_Python接口测试结果集实现封装比较
  2. Leetcode记录
  3. S如何边缘控制_强夯法效果如何?来看看这个检测结果
  4. docker 安装mysql_Docker安装MySQL完整版流程
  5. 【BZOJ2194】快速傅里叶之二,FFT和一点奇怪的想法
  6. bzoj1860 [Zjoi2006]麻将 结论+插数dp
  7. Spring源码之创建AOP代理(补)
  8. 什么是SysWow64,什么是System32
  9. UE4 各种玻璃材质制作汇总
  10. 手把手教你集成Andriod百度地图SDK
  11. 起源地杯青年足球锦标赛
  12. 【安卓】设置应用的开机启动
  13. 计算机主机箱进行总结,工业级主机用机箱分类总结
  14. cuda cudnn tensorflow对应_Cuda 的安装步骤
  15. 【ATE-SENT协议】使用LabVIEW采集并解析SENT协议
  16. 旅游推荐系统python_Python 实现推荐系统
  17. 随机获得map/json中的一组键值对
  18. 漏洞分析丨HEVD-10.TypeConfusing[win7x86]
  19. 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统)
  20. GFD233A 3BHE022294R0103

热门文章

  1. windows的bat脚本编写
  2. 【论文笔记】LiDAR Iris for Loop-Closure Detection
  3. Airbnb爱彼迎推出看得见“春色”的房源
  4. 自动驾驶哪家强?全球自动驾驶竞争力排行分析
  5. 双线性内插怎么缩小_鼻翼缩小该做内切还是外切?会留疤吗?恢复期是多久?...
  6. Java反射08 : 成员方法Method学习示例
  7. js删除对象中所有值为null和undefined的属性
  8. 【硬盘数据恢复】硬盘加电有异响,经检测是磁头损坏故障的硬盘数据恢复
  9. acm最难题_看到最接近客户的难题
  10. “笨办法”学Python3--习题37 复习各种符号