Objective-C 编程语言(6)类别与扩展----类别的使用

转载请标明出处: http://blog.csdn.net/zhangxingping

类别的使用

    类别的使用有如下几种方式:

    ● 扩展由别人实现的类

例如,我们可以通过类别来为Cocoa框架中的类增加新的方法。这些新增加的方法会被这个类的所有派生类继承,在运行时和原有的方法是没有任何区别的。

    ● 作为派生类的一种代替方式

和通过派生的方式来为类增加方法的方式相比,采用类别的方式来为类增加新的方法显得更加直接。例如,我们可以通过类别的方式来为NSArray或者其他的Cocoa类增加方法。和继承一样,通过类别的方式为类增加新的方法也不需要既存类的源代码。

    ● 以多个文件的方式来发布一个新类

例如,假如类中有很多的方法,那么我们可以对这些方法进行分组,然后根据分组结果在多个类别中进行实现。这种实现方式对整个开发过程可以带来如下的好处:

 ■  提供了一种非常简便的把相关方法进行分组的方式。甚至是不同类中的相似的方法都可以放置在同一个源文件中。

 ■  当有多个开发者共同开发一个较大的类的时候,扩展机制则可以极大地简化对这个类的管理。

 ■  可以获得对较复杂的类的增加式、递进式的开发

 ■  可以方便我们查阅需要经常使用的那些方法

 ■  使得可以对类进行配置以便适应不同应用程序,而不用维护多个不同版本的源码

    ● 声明非正式的协议

    更多信息参见“声明由别人来实现的接口”中的“非正式的协议”小节。

   

    尽管现在的Objective-C语言支持在类别中对类继承而来的方法进行重写(overloading),甚至是对在类的接口中声明的方法进行重写,但是这种做法是被强烈地不提倡的。因为类别不是派生类的替代品,这样做有着非常不好的地方:

    ● 当在类别中重写继承而来的方法时,类别是可以通过向super发送消息来调用从父类中继承而来的实现的。但是,如果在类别中对其类中既存的的方法进行重写,那么该类中原有的实现是没有办法被调用到的。

    ●  类别不能可靠地重写其类中别的类别中的方法。 由于很多的Cocoa类中都是用到了类别,因此这点显得尤为重要。框架由于框架类中的定义的方法很有可能是类别中的方法,如果对这些方法进行重写,那么优先调用哪个类别中的方法呢?这点Objective-C中并没有定义。

    ● 某些方法的修改可能导致整个框架行为的变化。例如,如果我们为NSObject类增加一个windowWillClose:方法的实现,这将导致所有窗体的委托对象都会相应这个方法,并且很可能修改所有NSWindow实例的行为。这将导致可怕的行为变化,甚至可以导致程序崩溃。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值