如何定义一个类别

原文地址:https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/Category.html


你使用类别来给一个已经存在的类不使用子类的方式来添加额外的方法--甚至那些是哪些源代码不对你开放的。你通常使用类别来给一个已经存在的类添加方法,比如一个在Cocoa frameworks中的定义。添加的方法可以被子类继承而且和在运行时中类的原有方法没什么区别。你能使用你自己的类别来:

1.可以通过单独发布文件来分发你的类--例如,你可以组合一个很臃肿的类的方法到几个类别,然后将每个类别放到不同的文件里

2.定义私有方法。

你通过在一个文件里添加许多方法到一个类来定义他们,并且通过一个类别名和定义他们的类的名字类命名他。类别的名字表示这些方法是一个类的拓展,而不是一个新类。

声明

类别的接口的声明看起来很像类的接口定义==只是类别名字后面跟随着一个括号并且他的父类里面没有提到。一个类别必须导入他的接口文件:

#import "SystemClass.h"


@interface SystemClass (CategoryName)


// method declarations


@end


一个通常的命名约束是类别的基类的名字是类的名字后面跟随着号。这个类可能声明在名字为SystemClass+CategoryName.h的文件中。

如果你使用类别来给你自己的类声明私有方法,你能把这些文件中的声明放在@implementation 前面:

#import "MyClass.h"

@interface MyClass (PrivateMethods)


// method declarations


@end


@implementation MyClass


// method definitions


@end


实现

如果你使用类别来给自己的类别声明私有方法,你能把实现放在你自己的类的@implementation中,如果你用类别来拓展哪些你不知道源代码的类,或者分发你自己的类的实现,你把实现放在一个名叫<ClassName>+CategoryName.m的文件。这个实现,像平常一样,导入他自己的接口,一个类别实现可能看起来像下面这样:

#import "SystemClass+CategoryName.h"


 


@implementation SystemClass ( CategoryName )


// method definitions


@end




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值