object-c学习:类别Category

原创 2012年03月21日 13:58:07

一直不明白类别的意思,因为C和java都没有类似的概念。

看到如下的描述,比较清晰,供大家参考:

 

 如果你想扩充一个类的功能,但又不想使用继承,你可以选择类别。
下面我们写一个Fraction 的类别,为Fraction 类增加计算两个分数的加减乘除的方法。
FractionMath.h
#import "Fraction.h"
@interface Fraction (Math1)
-(Fraction*) mul: (Fraction*) f;//乘法,就是传入一个Fraction 作为参数,与当前的Fraction
进行计算
-(Fraction*) div: (Fraction*) f;//除法
@end
@interface Fraction (Math2)
-(Fraction*) add: (Fraction*) f;//加法
@end
其实类别就是在你想要扩展的@interface 的名字后面加个( ),里面写上类别的名字,这个名
字必须是唯一的,也就是说一个@interface 只能有一个类别为XXX 的Category。
FractionMath.m
#import "FractionMath.h"
@implementation Fraction (Math1)
-(Fraction*) mul: (Fraction*) f{
return [[Fraction alloc] initWithNumerator: numerator*[f numerator]
denominator: denominator*[f denominator]];
}
-(Fraction*) div: (Fraction*) f{
return [[Fraction alloc] initWithNumerator: numerator*[f denominator]
denominator: denominator*[f numerator]];
}
@end
@implementation Fraction (Math2)
-(Fraction*) add: (Fraction*) f{
return [[Fraction alloc] initWithNumerator:
numerator*[f denominator] + denominator*[f numerator]
denominator: denominator*[f denominator]];
}
@end
类别的实现类也就是类型名后后面加个( ),里面写上类别的名字,其他的没有什么不同的。
上面唯一可能会让你头晕的就是加减乘除的实现代码,实际上就是嵌套调用,写成了一个语
句而已。拿add 的实现来说,就是创建要返回的计算结果Fraction 的实例,然后依据分数相
加要先通分的规则,结果的分子initWithNumber 就是第一个分数的分子*第二个分数的分母,
再加上第二个分数的分子*第一个分数的分母,分母denominator 参数就是两个分数的分母
相乘。
main.m
#import "FractionMath.h"
int main( int argc, const char *argv[] ) {
Fraction *frac1 = [[Fraction alloc] initWithNumerator: 1 denominator: 3];
Fraction *frac2 = [[Fraction alloc] initWithNumerator: 2 denominator: 5];
Fraction *frac3 = [frac1 mul: frac2];
[frac1 print];
printf( " * " );
[frac2 print];
printf( " = " );
[frac3 print];
printf( "\n" );
Fraction *frac5 = [frac1 add: frac2];
[frac1 print];
printf( " + " );
[frac2 print];
printf( " = " );
[frac5 print];
printf( "\n" );
[frac1 release];
[frac2 release];
[frac3 release];
[frac5 release];
return 0;
}

相关文章推荐

Object-C 学习笔记(二十)---类目(类别)Category

类目:可以扩充不能被继承的类的功能(方法),属于公有,跟在类里写没区别可以被子类继承,一般不要覆盖原来类的方法,因为延展的执行级别比原本类高. 注意: (1)不能添加实例变量        ...

关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol&nbsp

转自: 作者:舍得333 主页:http://blog.sina.com.cn/u/1509658847 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明,...

Object-c学习笔记十三-----类别

在现有的类中添加新方法,这些新方法被称之为“类别”; 1。类别的作用 创建类别: @interface NSString(NumberCnvenience)//声明类别 现有的类名位于@in...

object-c 类簇 category

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 18.0px; font: 18.0px Lucida Grande}p.p2 {margin:...

IOS开发基础Object-C(11)—Category语法

谢天谢地,糟心的内存管理终于讲完了,我们的OC内存管理也就先告一段落了,以后还是需要多联系多理解,记住,理解最重要。 今天呢,我们再来讲一个很重要的语法——Category,根据字面的意思呢就是种类分...

object-c category 和 protocol

这两个都是mac下的协议,用法有点像C++中的函数重载和虚函数。 首先Category: 它可以给原有的类增加新的方法,而不用重新建一个类,然后在原有的类的基础上使用这个方法,但是不能给类增加新的数...

Object-C 分类(Category) 和 扩展(Extension)

分类(Category)分类作为一种编译的手段,允许通过类添加方法来扩展原有类。但只能是方法,不能够添加实例变量的扩展。常用文件名 类名+分类名.h(.m) Pay attention here, ...
  • zesicus
  • zesicus
  • 2015年12月01日 11:29
  • 453

Object-C中Category类体验

Object-C开发的时候有的时候会用到Category类,类似于Java和C#中扩展类,就是如果你觉得如果你觉得常用的方法在String中没有,可以根据业务需求和个人喜好写一个扩展类,然后在其中补充...

黑马程序员--Object-C 类别

类别是一种为现有的类添加新方法的方法。

Object-C基础(9)——多态、类别、扩展与协议

多态     多态的概念和产生     变态:相同类型的对象,在同一件行为(方法),但某个对象表现成与众不同的行为(态),此时就称之为变态。     多态:相同类型的对象,在执行同一个方法时,表...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:object-c学习:类别Category
举报原因:
原因补充:

(最多只允许输入30个字)