OC中分类的使用

来源:互联网 发布:炉石传说竞技场大数据 编辑:程序博客网 时间:2024/05/18 01:35

在oc中,如果想对某个类进行方法的扩充,又不想改变原有累的方法和成员变量,可以使用分类

分类-Category

  1. 基本用途
  • 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式
  • 继承
  • 分类(Category)


  1. 格式
  • 分类的声明

@interface 类名 (分类名称)

// 方法声明

@end

  • 分类的实现

@implementation 类名 (分类名称)

// 方法实现

@end


  1. 好处
  • 一个庞大的类可以分模块开发
  • 一个庞大的类可以由多个人来编写,更有利于团队合作
  1. 给系统自带的类添加分类
  • 给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数
  • 给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数


  1. 注意
  • Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类
  • Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法
  • 多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效

示例代码:


首先 ,创建一个“人”类

#import <Foundation/Foundation.h>@interface Man : NSObject@property NSString *name;-initWithName:(NSString*)name;@end

#import "Man.h"@implementation Man-(id)initWithName:(NSString *)name{    self = [super init];    if (self) {         self.name = name;    }    return self;}@end

然后创建一个带Fxxx方法的分类

#import "Man.h"@interface Man (Fuck)-(void)fuckWith:(Man*)man;@end


#import "Man+Fuck.h"@implementation Man (Fuck)-(void)fuckWith:(Man*)man{    NSLog(@"%@与%@在做捕捉爱的游戏",self.name,man.name);}@end


调用


#import <Foundation/Foundation.h>#import "Man+Fuck.h"int main(){        Man *man1 = [[Man alloc]initWithName:@"小帅"];    Man *man2 = [[Man alloc]initWithName:@"小美"];        [man1 fuckWith: man2];    return 0;}





1 0
原创粉丝点击