
上QQ阅读APP看书,第一时间看更新
5.2 分类
当需要为UIKit类/Foundation框架中提供的系统类增加新的API时,可以有多种方法实现,例如,可以新建一个子类,然后在子类中实现新的功能,但这样做会增加很多类,从而增加代码维护的工作量。除此之外,还可以对原有的类增加其分类,对类中提供的API进行扩展,例如,在原有的系统类中定义新的方法,这称为分类(Category)。
1.创建分类的方法
当需要对一个类新增一些新方法时,可以使用分类Category功能。特别是针对系统自定义的类,如UIView、UIImageView等。例如,大名鼎鼎的SDWebImage框架,就是UIImageView类的分类。假如希望给UIImageView类增加一个分类,在该分类中新增一个类方法,即:当实例化一个UIImageView对象时,可以默认填充一张图片。可以按照如下步骤进行:
- 在Xcode中创建分类文件,新增分类如图5-12所示,选择Objective-C File。

图5-12 新增分类
- 填写分类的名称,File Type选择Category,Class填写是针对哪个类的扩展,如图5-13所示。
- 单击Next按钮即可完成文件的添加。添加完成后,在工程目录中会出现,如图5-14所示。
- 在.h文件中,添加需要实现的新方法名称,即增加新的API。


图5-13 填写分类信息

图5-14 分类创建成功
- 在.m文件中,对新增的方法实现其具体的功能,例如,当调用UIImageView的imageViewWithDefaultImage方法时,会自动填充一个默认占位图。

- 当需要创建UIImageView对象的时候,可以使用分类中新增的imageViewWithDefaultImage方法来创建一个UIImageView对象,并且该对象具有一个默认图片。

2.使用分类时的注意事项
当使用分类Category时,有以下几个方法需要程序员关注。
- 不要用分类去重写已经存在的方法。
- 通过使用分类添加的方法,不仅针对该类有效,对于其子类也有效,例如:给UIView添加了分类,UIImageView、UIButton等子类也可以使用。
- 类+分类名称必须唯一。