Objective-C语法之Category的使用

网友投稿 305 2022-11-28

Objective-C语法之Category的使用

无论一个类设计的如何完美,都不可避免的会遇到没有预测到的需求,那怎么扩展现有的类呢?当然,继承是个不错的选择。但是Objective-C提供了一种特别的方式来扩展类,叫Catagory,可以动态的为已经存在的类添加新的行为。这样可以保证类的原原来的基础上,较小的改动就可以增加需要的功能。使用Category对类进行扩展时,不需要访问其源代码,也不需要创建子类,这样我们可以扩展系统提供的类。Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。

通过一个简单的例子看看Category如何使用。

现在我们有一个类叫MyClass

[cpp]  ​​view plain​​​ ​​​copy​​

#import @interface MyClass : NSObject-(void) myPrint;@end

[cpp]  ​​view plain​​​ ​​​copy​​

#import "MyClass.h"@implementation MyClass-(void) myPrint{"myPrint 调用了");}@end

它有一个实例方法:myPrint,待会我们可以在扩展后调用它

好了,有了上面的MyClass后,我们要在不增加子类,不修改MyClass类的情况下增加一个HelloWorld的方法,怎么添加呢?只需添加两个文件MyClass+HelloWorld.h  和 MyClass+HelloWorld.m。

看看这两个文件怎么实现,在Xcoed上 按Command+N,新建文件,选择Objective-C category方式创建类,这样Xcode会自动帮你创建约定命名方式的文件。

Category on的类是MyClass,选对了哦

这样Xcode就帮你创建了MyClass+HelloWorld.h  和 MyClass+HelloWorld.m这两个 文件了。

那么我们现在添加一个HelloWorld方法。看看实现后的代码如下:

[cpp]  ​​view plain​​​ ​​​copy​​

#import "MyClass.h"@interface MyClass (HelloWorld)-(void)HelloWorld;@end

[cpp]  ​​view plain​​​ ​​​copy​​

#import "MyClass+HelloWorld.h"@implementation MyClass (HelloWorld)-(void)HelloWorld{"你好 伦敦奥运!");}@end

在main中调用

[cpp]  ​​view plain​​​ ​​​copy​​

MyClass *myclass = [[[MyClass alloc]init]autorelease];[myclass HelloWorld];[myclass myPrint];

运行打印结果:

[cpp]  ​​view plain​​​ ​​​copy​​

2012-08-09 11:24:16.697 objectiveC[16053:403] 你好 伦敦奥运!2012-08-09 11:24:16.699 objectiveC[16053:403] myPrint 调用了

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于Linux的USB从设备驱动研究
下一篇:Objective-C语法之基本数据类型
相关文章

 发表评论

暂时没有评论,来抢沙发吧~