黑马程序员技术交流社区

标题: ios基础 分类 [打印本页]

作者: luronghua    时间: 2016-7-19 22:27
标题: ios基础 分类
分类:

分类提供了一种简单的方式,用它可以将类的定义模块化到相关方法的组或分类中。它还提供了扩展现有类定义的简便方式,并且不必访问类的源代码,也不需要创建子类。

#import "Fraction.h"

@interface Fraction (MathOps)

-(Fraction *) add: (Fraction *) f;

-(Fraction *) mul: (Fraction *) f;

-(Fraction *) sub: (Fraction *) f;

-(Fraction *) div: (Fraction *) f;

@end

注意,这既是接口部分的定义,也是现有接口部分的扩展。因此,必须包括原接口部分,这样编译器就知道Fraction类。



按照惯例,作为分类的.h和.m文件的基本名称是由类的名称紧接着分类的名称。例如:FractionMathOps.m

一些程序员使用符号“+”来分隔类和分类的名称,比如Fraction+MathOps.h。呵呵,这个倒是有点像C语言的下划线分割一样。一般情况下就不要这么搞了。



类的扩展:

创建一个未命名的分类,且在括号“()”之间不指定名字,这是一种特殊的情况。这种特殊的语法定义为类的扩展。未命名类中声明的方法需要在主实现区域实现,而不是在分离的实现区域中实现。

未命名分类是非常有用的,因为它们的方法都是私有的。如果需要写一个类,而且数据和方法仅供这个类本身使用,未命名类比较合适。



关于分类的注意事项:

分类可以覆写该类中的另一个方法,但是通常认为这种做法是做虐的设计习惯。所以需要注意:

第一、覆写了一个方法后,再也不能访问原来的方法。(如果确实需要覆写方法,正确的选择可能是创建子类。)

第二、通过使用分类添加新的方法来扩展类不仅仅影响这个类,同时也会影响它的所有子类。

第三、对象/分类命名对必须是唯一的。因为大家使用的名称空间是程序代码、库、框架和插件共享的。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2