Learning objective-c 分类

最近对objective-c比较感兴趣,潜心学习了几天,发现oc那是相当的灵活(以后我都把objective-c简称为oc)。当然,任何事情都有他的两名性,高度的灵活性必然带来难以控制的麻烦。为什么我会这样说,等我把下面的几个概念介绍完后,你们就会懂的。
oc中引入了两个比较有意思的概念,分类和协议。事物存在即有他存在的道理,我们学习一门新领域的时候,最重要的是要学习他存在的道理,为什么要这样做?为什么存在?这才是关键,如果这些你都掌握不了,就算你手里拿的是倚天剑,你也耍不出那个境界。
分类其实比较好理解,请继续阅读下面的文字,如果已经有一个计算器的类型,已经定义了add,delete等方法,但没有定义除法运算,如果你此时需要调用此计算器的除法运算,你怎么办?在java或者c中一般通过继承已经存在的计算器类,并在子类中添加我们需要的除法函数,然后我们在实例化子列对象,并调用实例对象的除法方法。
回过头来想想,有没有办法不创建子类,便可以扩充现有的计算器类呢?在oc中提出了分类的概念,我们不用再创建子类,在分类中可以把功能相近的方法都放在分类中进行申明和定义,这样你就可以使用计算器对象的除法函数了,下面看个具体的例子。
SampleCategory.h #import @interface 计算器类 (计算器的分类名) - (id)除法; @end SampleCategory.m #import "PrettyPrintCategory.h" @implementation 计算器类 (计算器的分类名) - (id)除法 {
// implementation code
here...} @end

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

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

Tags: 

延伸阅读

最新评论

发表评论