上一章Objective-C开发教程请查看:Objective-C类设计和数据封装
Objective-C的类别Category也是个奇葩,用处不大,嫌麻烦用继承就好了。实际上OC的类别就类似于继承,而扩展extension就是个匿名类别,所以你看用继承不就好了,偏偏多了类别和扩展,所以还是建议能不用就不用。
下面是类别的声明和实现的语法:
// 声明类别,类别名称为CategoryName
@interface ClassName (CategoryName)@end@implementation ClassName (CategoryName)@end
【Objective-C类别(Category)用法解析 – Objective-C开发教程】类别CategoryName表示对原有的类ClassName进行方法上的扩展,也就是只能增加方法。其实CategoryName类别有如给ClassName类嵌入了一些功能,使用的时候依然是使用ClassName,此时就包含了CategoryName中的方法,即使继承同样可以使用。
但是要记住,最好显式导入类别的头文件。
类别的特点
- 你可以为任何类声明一个类别,即使没有源码(继承也不用源码呢!)
- 在类的类别中声明的方法可以供类的所有实例使用,包括类的子类(继承也可以呢!)
- 在类别中添加的方法和类的方法没有任何区别。
- 无法向现有类中添加新的实例变量。
- 添加同名方法会预先使用类别中的方法。
下面是类别的一个简单的例子,这是对NSString类的扩展:
#import <
Foundation/Foundation.h>@interface NSString(MyAdditions)
+(NSString *)getCopyRightString;
@end@implementation NSString(MyAdditions)+(NSString *)getCopyRightString {
return @"Copyright srcmini.com 2019";
}@endint main(int argc, const char * argv[]) {
NSString *copyrightString = [NSString getCopyRightString];
NSLog(@"访问类别: %@",copyrightString);
return 0;
}
不过还是那句话,能不用就不用,而上面说到使用类别的那种情况,也太偏门了,如果遇到也可以用。
推荐阅读
- Objective-C冒充posing用法解析 – Objective-C开发教程
- Objective-C类设计和数据封装 – Objective-C开发教程
- Objective-C多态性和继承 – Objective-C开发教程
- iOS国际化/本地化完全操作笔记 – Objective-C开发教程
- Objective-C NSObject详细解释 – Objective-C开发教程
- Objective-C使用继承 – Objective-C开发教程
- Objective-C实现双向链表、栈和队列 – Objective-C开发教程
- Objective-C类和对象 – Objective-C开发教程
- Objective-C命令行参数 – Objective-C开发教程