博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
11、OC —— Category
阅读量:6246 次
发布时间:2019-06-22

本文共 1742 字,大约阅读时间需要 5 分钟。

  hot3.png

1、有时我们想扩展一个类的方法,可以用继承,但继承父类的方法改后对子类也有影响,如果使用OC中的category,就可以很简单的扩展一个类的方法。

2、如何定义category?

    例如我们有一个Person类

    Person.h

#import 
@interface Person : NSObject- (void)run;- (void)jump;@end

    Person.m

#import "Person.h"@implementation Person- (void)run{    NSLog(@"普通人跑步");}- (void)jump{    NSLog(@"普通人跳跃");}@end

    这时我们想扩展这个类,让Person可以fly,把这个分类称为IronMan

    172225_zLe7_1444783.png

    172319_Je46_1444783.png

    Person+IronMan.h

#import "Person.h"@interface Person (IronMan)- (void)fly;@end

    Person+IronMan.m

#import "Person+IronMan.h"@implementation Person (IronMan)- (void)fly{    NSLog(@"钢铁侠飞翔中");}@end

3、怎么使用category?

    a)在没 import "Person+IronMan.h" 分类时,只能调用原来 Person 的方法。

    b)只用import 后才可调用该分类里的方法。

    main.m

#import 
#import "Person.h"#import "Person+IronMan.h"int main(int argc, const char * argv[]){    @autoreleasepool {        Person *person = [[Person alloc] init];        [person run];                [person fly];    }    return 0;}

    当然分类也可以写在原来的Person类里,比如:

    Person.h

#import 
@interface Person : NSObject- (void)run;- (void)jump;@end// Superman@interface Person (Superman)- (void)superRun;@end

4、category注意点

    a)类名后面有个冒号代表继承,类名后面有个括号代表分类。    

    b)category很像java的接口,只能扩展方法,不能扩展类的成员变量。

    c)虽然分类里可以重写类的方法,实际就是覆盖,但建议不要重写方法,自己重新写个新的方法较好,避免混乱。

5、categroy常用于系统自动类,当系统自带的类不能满足我们的需求时,我们就需要自己来写

    例如,NSString中有很多有用的方法,但我想对它扩展一个 smile 的方法,让字符串笑起来

    173833_3855_1444783.png

    NSString+Smile.h

#import 
@interface NSString (Smile)- (void)smile;@end

    NSString+Smile.m

#import "NSString+Smile.h"@implementation NSString (Smile)- (void)smile{    NSLog(@"%@ 正在偷笑", self);}@end

    main.m

#import 
#import "NSString+Smile.h"int main(int argc, const char * argv[]){    @autoreleasepool {        NSString *str = @"cobish";        [str smile];    }    return 0;}

转载于:https://my.oschina.net/cobish/blog/355113

你可能感兴趣的文章
VS2010远程调试C#程序
查看>>
windows查看端口占用
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
Apache Pulsar中的地域复制,第1篇:概念和功能
查看>>
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
计算机网络与Internet应用
查看>>
linux性能剖析工具
查看>>
flutter中的异步
查看>>
计算机高手也不能编出俄罗斯方块——计算机达人成长之路(16)
查看>>
# 2017-2018-1 20155224 《信息安全系统设计基础》第七周学习总结
查看>>
scikit-learn预处理实例之一:使用FunctionTransformer选择列
查看>>
Mars说光场(3)— 光场采集
查看>>
[CodeWars][JS]如何判断给定的数字是否整数
查看>>
实现div毛玻璃背景
查看>>
zoj 1010 Area 判断线段是否相交(把线段扩充一倍后 好处理) + 多边形求面积...
查看>>
sublime text ctrl+b
查看>>
时间复杂度几个概念
查看>>