@interface和category和extension小结

注意:category是一种机制,没有关键字@category

Category的作用,它不需要使用子类(Subclassing)机制,就允许向一个类文件中添加新的方法声明,并且在类实现的文件中的同一个名字下定义这些方法。

 

定义category的过程大致可分为以下几个步骤: 

    第一步、创建一个带有接口的新文件,即创建已有类,命名惯例:ClassName+CategoryName,注意扩展的类必须是已经存在的,例如下面扩展的NSString 

    第二步、在新文件中添加需要扩展的方法及方法的实现,即需要添加的分类。注意只能添加方法,不能添加变量。  

 

写了一个简单的例子,为NSString类添加一个方法,一个NSString对象就可以调用这个方法了。

.h文件

 

#import <Foundation/Foundation.h>
@interface NSString(Hello)
- (void) helloMethod;
@end

 

 .m文件

 

#import "NSStringHello.h"
@implementation NSString(Hello)
- (void) helloMethod{
    NSLog(@"hello ,this is a ”@cantegory“ test");
}
@end

 

 为什么对类进行扩展的feature被称作category?该名称应该反映了某种初衷,那就是当某个类比较复杂庞大时,我们可以对它的功能(也就是成员函数)进行分类,并且把它们放入不同的文件加以实现。

 

 

 

CategoryExtension都是用来给已定义的类增加新的内容的。

Category和原有类的耦合更低一些,声明和实现都可以写在单独的文件里。但是只能为已定义类增加Method,而不能加入instance variable。

Extension耦合比较高,声明可以单独写,但是实现必须写在原有类的@implementation中。可以增加Method和instance variable。

Extension给人感觉更像是在编写类时为了封装之类的特性而设计,和类是同时编写的。而category则是在用到某一个framework中的类时临时增加的特性。

Extension的一个特性就是可以redeclare一个instance variable,将之从readonly改为对内readwrite.

 

quding:使用Extension可以更好的封装类,在h文件中能看到的都是对外的接口,其余的instance variable和对内的@property等都可以写在Extension,这样类的结构更加清晰。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值