A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luronghua 中级黑马   /  2016-7-19 22:27  /  1000 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

分类:

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

#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语言的下划线分割一样。一般情况下就不要这么搞了。



类的扩展:

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

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



关于分类的注意事项:

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

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

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

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马