最近对objective-c比较感兴趣,潜心学习了几天,发现oc那是相当的灵活(以后我都把objective-c简称为oc)。当然,任何事情都有他的两面性,高度的灵活性必然带来难以控制的麻烦。为什么我会这样说,等我把下面的几个概念介绍完后,你们就会懂的。 

 

 oc中引入了两个比较有意思的概念,分类和协议。事物存在即有他存在的道理,我们学习一门新领域的时候,最重要的是要学习他存在的道理,为什么要这样做?为什么存在?这才是关键,如果这些你都掌握不了,就算你手里拿的是倚天剑,你也耍不出那个境界。

 

 分类其实比较好理解,请继续阅读下面的文字,如果已经有一个计算器的类型,已经定义了add,delete等方法,但没有定义除法运算,如果你此时需要调用此计算器的除法运算,你怎么办?在java或者c中一般通过继承已经存在的计算器类,并在子类中添加我们需要的除法函数,然后我们在实例化子列对象,并调用实例对象的除法方法。

 

回过头来想想,有没有办法不创建子类,便可以扩充现有的计算器类呢?在oc中提出了分类的概念,我们不用再创建子类,在分类中可以把功能相近的方法都放在分类中进行申明和定义,这样你就可以使用计算器对象的除法函数了,下面看个具体的例子。


SampleCategory.h

#import <Foundation/NSArray.h>

@interface 计算器类 (计算器的分类名)

- (id)除法;

@end
 

SampleCategory.m

#import "PrettyPrintCategory.h"

@implementation 计算器类 (计算器的分类名)

- (id)除法
{    

// implementation code 

here...}

@end

 


通过分类对计算器类进行扩展,我们就可以向计算器发送除法消息[计算器对象 除法:]

 

总结:

虽然oc中分类带来无比灵活的扩展类的方法,也对类的整个层次结构有些影响,需要特别注意的是,计算器分类中的除法消息,只对他本人或者他的子孙有效,下一章节将讲叙类的扩充范围更大的协议概念,请关注。

 

 

作者:一尘
出处:http://wmj.cnblogs.com/ 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

 

作者: 一尘 发表于 2011-05-15 15:09 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架