实战解析 Categor 对已有类进行扩展


Category 类别


功能介绍:

Category 可以在已经存在的类里添加新的方法,在不改变已有类的情况下经行扩展!

而且ios 也提供了对字符串 NSString NSDictionary NSArray 的扩展,


主要作用:

category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,


网上说的3个作用

要有3个作用:
(1)将类的实现分散到多个不同文件或多个不同框架中。


(2)创建对私有方法的前向引用


(3)向对象添加非正式协议。


 继承可以增加,修改或者删除方法,并且可以增加属性


下面的说法更容易让人理解  当其实说的都差不多


1.      在不创建继承类的情况下实现对已有类的扩展。


2.      简化类的开发工作(当一个类需要多个程序员协同开发的时候,Category可以将同一个类根据用途分别放在不同的源文件中,从而便于程序员独立开发相应的方法集合)。


3.      将常用的相关的方法分组。


4.      在没有源代码的情况下可以用来修复BUG。


注意事项

1  如果你添加的方法名和被扩展的类里类名相同,扩展的类会被覆盖!这的地方一定要注意,如何你覆盖了里面的方法可能引用bug,如果想覆盖这个方法最好弄清楚里面的调用情况或者在那个函数里面的代码的基础上进行扩展。


2 在使用Category 时 只能添加新的方法,不能添加新的变量


3  Category  的名字必须是唯一的 例如   @interface SetDogMessage(CATEGORY) 里的  CATEGORY 必须是唯一的


下面看下代码吧

创建了 一个SetDogMessage 类 两个变量,一个方法。

#import <Foundation/Foundation.h>


@interface SetDogMessage : NSObject

@property (strong,nonatomic)NSString * dogNameString;

@property (strong,nonatomic)NSString * dogAgeString;

-(void)dogLikeEatFood;

@end


/SetDogMessage/.m//

#import "SetDogMessage.h"


@implementation SetDogMessage

@synthesize dogAgeString;

@synthesize dogNameString;


-(void)dogLikeEatFood

{

    NSLog(@"my dog name is %@, it age is %@ ,like eat bone",dogNameString,dogAgeString);

}

@end

现在我创建一个扩展的类 CategoryDogLikePlay 

引用被扩展方法的头文件 #import "SetDogMessage.h"

改变  interface,implementation 的接口名字改成被扩展的类名,并设置一个Category 名字 如(CATEGORY)


#import <Foundation/Foundation.h>

#import "SetDogMessage.h"

@interface SetDogMessage(CATEGORY)

-(void)doglikeRun;

@end


//CategoryDogLikePlay.m/文件

#import "CategoryDogLikePlay.h"


@implementation  SetDogMessage(CATEGORY)

-(void)doglikeRun

{

    NSLog(@"dog like run");

}

@end


- (void)viewDidLoad

{

    [superviewDidLoad];

SetDogMessage *dog = [[SetDogMessagealloc]init];

    dog.dogNameString = @"大黄";

    dog.dogAgeString = @"10";

    [dog dogLikeEatFood];

    [dog doglikeRun ];

}


这个例子真的是很简单!但是在项目中用到Category 时候你就会发现真的很好用!




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值