OC中的类别(Category)使用详解

需积分: 9 9 下载量 196 浏览量 更新于2024-08-13 收藏 222KB PPT 举报
"类别、协议、委托-委托-类别-协议" 在面向对象编程中,Objective-C (OC) 提供了丰富的机制来扩展和定制已有类的功能。本文主要讨论了类别(Category)、协议(Protocol)和委托(Delegate)这三种机制,它们都是OC中重要的设计模式。 类别是OC中用于扩展已有类的一个特性。类别允许我们在不修改原有类源代码的情况下,为类添加新的方法。例如,我们创建了一个名为`Men`的类,但在后续开发中发现需要在这个类中添加一个`speak`方法。传统的做法是直接修改`Men`类的源代码,但类别提供了一种更灵活的方式。我们可以在一个单独的文件中定义一个名为`menAdd`的类别,这样就可以在不改动`Men`类的前提下添加`speak`方法: ```objc @interface Men (menAdd) // 定义menAdd类别,作为Men类的扩展 -(void)speak; @end @implementation Men (menAdd) -(void)speak { NSLog(@"我是类别补充的speak方法"); } @end ``` 需要注意的是,如果`Men`类本身已经有一个`speak`方法,类别中的`speak`方法会覆盖原有的实现。此外,类别不能直接添加实例变量(属性),但可以通过关联对象(Associated Objects)来间接实现属性的添加。 协议是OC中的一种约定,它定义了一组方法签名,用来规定遵循协议的类需要实现哪些方法。协议常用于定义对象之间的交互规则,尤其是作为委托模式的一部分。例如,一个视图可能定义一个协议,规定其代理(Delegate)需要实现哪些方法来响应用户的操作: ```objc @protocol MyViewDelegate <NSObject> // 定义MyViewDelegate协议 - (void)myViewDidTap:(MyView *)view; // 规定代理需要实现的方法 @end ``` 然后,其他类可以声明遵循这个协议,并实现相应的方法: ```objc @interface ViewController : UIViewController <MyViewDelegate> // ViewController声明遵循MyViewDelegate协议 @end @implementation ViewController - (void)myViewDidTap:(MyView *)view { // 处理用户点击事件 } @end ``` 委托模式是OC中常用的设计模式之一,它通过协议来实现对象间的通信。一个对象(委托者)持有另一个对象(委托)的引用,当某些事件发生时,委托者会调用委托对象中协议规定的方法,以此传递信息或请求处理。委托模式使得代码结构更加清晰,降低了类之间的耦合度。 总结起来,类别提供了在不修改原类源代码的情况下扩展类功能的能力,协议定义了对象间交互的约定,而委托则是基于协议实现的一种通信机制,使得对象能够协作完成任务。这三者在OC中相互配合,极大地增强了代码的灵活性和可维护性。